HTTP POST 方法在 WebApi 上被视为 GET

Posted

技术标签:

【中文标题】HTTP POST 方法在 WebApi 上被视为 GET【英文标题】:HTTP POST method treated like GET on WebApi 【发布时间】: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 来尝试它,但它似乎工作。我一定是个白痴有一段时间了 【参考方案1】:

原来我使用的是 Http,而不是 Https。

【讨论】:

如果这真的是您的问题的全部,您应该接受这个答案(左侧的复选标记),让其他可能发现您的问题的用户认为这是解决方案。 是的,抱歉,我发帖的时候不能发,需要等两天。谢谢提醒 天哪!你救了我的一天!在网上搜索解决方案 6 小时,问题是我忘记在请求 URL 中输入 https。谢谢!!!!!!! 谢谢!这让我省去了更多的挫败感,虽然我已经花了很多钱了! 对我来说是“www”。与没有“www。”。添加 www 已解析。

以上是关于HTTP POST 方法在 WebApi 上被视为 GET的主要内容,如果未能解决你的问题,请参考以下文章

将多个值从 WebApi(post)返回到 AngularJs

调用 web api 时 $http 调用两次

$http.post 的 Web API 405 错误

HTTP post请求中的多个参数不在Asp.net webApi 2.0中绑定

webapi 知识点

Angular 2 http.post 不适用于 web api