c# MVC API访问PHP通信(从c# MVC控制器获取/发送数据到PHP)



谁能告诉我我有MVC 5(c#) API控制器,我想使用PHP应用程序与用户身份验证访问API数据。(没有用户身份验证我的PHP代码将工作)。我已经创建了用户模型,并为c# MVC控制器"[Authorize(Roles = " user ")]"添加了顶部。我已经测试过这个用户名&密码生效

当我在PHP代码中添加这些细节时,它不适合我。它显示"{"消息":"此请求的授权已被拒绝。}"你能告诉我,为什么不工作,如果我的解决方案不好,请告诉我最好的解决方案。

c# MVC控制器

[Authorize(Roles = "User")]
public class HolidayController : ApiController
{
return "value";
}

<form method="post" action="index.php"  enctype="multipart/form-data">
Enter your Postcode: 
 <input type="text" name="search" id="txtSearch" value=""   >
<input name="submit" type="submit" value="Search"/><br />
</form>
PHP代码

if(isset($_POST['submit']))
{
// Checking null values in message.
$value = $_POST['search'];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.myname.com/api/Holiday?pcode='.$value.'');
curl_setopt($ch, CURLOPT_POST, 1);// set post data to true
curl_setopt($ch, CURLOPT_POSTFIELDS,'Email=name&Password=123456');   // post data
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$json = curl_exec($ch);
$result = curl_exec($ch);
print_r($result);
$Locations = json_decode($json); 

curl_close ($ch);
foreach($Locations as $location)
    { echo $location->SubName. }
}
?>

打印{"Message":"Authorization has been denied for this request."}

如果你想要一个简单的解决方案,你没有安全问题,你可以使用[AllowAnonymous]而不是[Authorize(Roles = "User")],如果你返回一个JSon,你必须添加allowget选项

public class HolidayController : ApiController
{
    [AllowAnonymous]    
    public ActionResult YourMethod()
    {
        return Json(data, JsonRequestBehavior.AllowGet);
    }
}

希望能有所帮助

使用标签[Authorize(Roles = "User")]只允许经过验证的windows用户点击该url。您应该考虑继承AuthorizeAttribute类。下面是一个实现http://www.diaryofaninja.com/blog/2011/07/24/writing-your-own-custom-aspnet-mvc-authorize-attributes的好例子。您将需要更改AuthorizeCore函数以检查是否验证您的电子邮件和密码字段,而不是使用HttpContextBase.User来验证请求。

我认为你正在使用RestFul服务,如果它是真的,你需要检查是否HTTP基本是允许的,以下步骤:

  1. 安装一些RestFul测试应用程序,如Firefox的Rest Easy插件。
  2. 插入你的URL,保持方法为GET(不要点击发送!)
  3. 在认证选项中为这个URL添加一个有效的用户名和密码
  4. 点击发送按钮,查看结果。

所以,如果它工作,你需要在你的请求头中添加一个HTTP基本认证信息。

内容为:curl_setopt($process, CURLOPT_USERPWD, $username。":"。密码)美元;

请参阅:我如何使用PHP curl使用HTTP基本身份验证请求?

最新更新