【发布时间】:2016-12-19 18:22:34
【问题描述】:
我一直在创建 WebApi 控制器,并且正在尝试使用 HttpPost 请求来提交新用户进行注册。这在我的本地主机上运行良好,但是当我将其发布到 Azure 时,我收到 405 方法不允许错误消息:“请求的资源不支持 http 方法 'GET'”。
我用postman来检查action,所以我用generate code来查看请求,如下:
POST /api/account/register/student HTTP/1.1
Host: www.l3cture.com
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 27c1b2ab-96ad-4a99-b271-4030402768e7
所以我可以清楚地看到该请求是一个 POST。 以下是带有属性的控制器操作代码(我目前已对其进行了简化,因此不会发布任何模型,并且会发生相同的行为)
[HttpPost]
[Route("register/student")]
[AllowAnonymous]
public async Task<IHttpActionResult> PostStudent(/*RegisterStudent model*/)
{
//Implementation of register
return Ok();
}
我检查了属性的命名空间,它是 System.Web.Http,所以它不会与 MVC 命名空间混淆。
有趣的是,当我将方法更改为 HttpGet,并使用邮递员 POST 到它时,我收到状态 200。这几乎就像 HttpPost 请求都被我的控制器视为 HttpGet 一样。
我在其他地方使用过 HttpPut 和 HttpDelete,它们都可以正常工作。
我不确定如何解决这个问题,想知道是否有人有任何想法? 如果我需要发布更多代码进行澄清,请告诉我。
提前致谢
【问题讨论】:
-
当我使用 https 而不是 http 时似乎可以工作。这可以关闭
-
您是否在 Body 中传递您的模型以进行 Post?认为您的方法参数中缺少 [FromBody] 属性。
-
我试过 [FromBody] 但没有奏效。虽然我只是通过指定 https 来尝试它,但它似乎工作。我一定是个白痴有一段时间了
标签: c# asp.net-mvc-4 asp.net-web-api2 http-status-code-405 http-method