【问题标题】:Why is WebAPI action found as GET but 404 when I use POST?为什么当我使用 POST 时发现 WebAPI 操作为 GET 但 404?
【发布时间】:2014-11-06 16:37:28
【问题描述】:

我的控制器上有一个名为 GetPhotos 的操作。当我使用适当的参数将操作调用为 GET 时,会调用该操作并且一切正常。 (我用的是属性路由)

获取代码

    [Route("getphotos")]
    public IHttpActionResult GetPhotos(string userid, string password, string system, string outstation, string systemno, string version, string compid, string photono)
    {
        //Do some logic here
        return OK();
    }

GET 调用

GET http://localhost:60672/getphotos?userid=User1++&password=12345&system=UserSystem&outstation=9&systemno=3&version=6.78&compid=mycomputername&photono=003573
HTTP/1.1
User-Agent: Fiddler
Host: localhost:60672
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

但是,当我将操作更改为 HttpPost 并将我的调用更改为 POST 调用(通过 Fiddler)时,我得到了 404。

POST 代码

    [HttpPost]
    [Route("getphotos")]
    public IHttpActionResult GetPhotos(string userid, string password, string system, string outstation, string systemno, string version, string compid, string photono)
    {
        //Do some logic here
        return OK();
    }

POST 调用

POST http://localhost:60672/getphotos HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent: Fiddler
Host: localhost:60672
Content-Length: 170
Pragma: no-cache

USERID=User1&PASSWORD=12345&SYSTEM=UserSystem&OUTSTATION=9&SYSTEMNO=3&VERSION=6%2E79&COMPID=mycomputername&PHOTONO=003573

为什么我无法通过 POST 找到操作?

【问题讨论】:

  • 尝试更改 POST 方法的名称GetPhotos => PostPhotos
  • 您启用了 CORS 吗?我猜你需要启用它...

标签: c# routing asp.net-web-api2


【解决方案1】:

我找到了答案here

显然,我做错了两件事。我已经习惯了 MVC,并试图以 MVC 方式而不是 WebAPI 方式来做事。

首先,我需要在参数前添加 [FromBody] 属性,因为我希望从那里提取模型绑定。

然而,WebAPI 似乎也只允许一个 [FromBody] 参数用于任何给定的操作。所以,我最终要做的是创建一个模型,它封装了我的所有值并将我的方法定义更改为如下所示:

public IHttpActionResult GetPhotos([FromBody] GetPhotoModel model) { ... }

希望这能让您免于遭受同样的挫折!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 2023-03-26
    • 2020-04-28
    • 1970-01-01
    • 2013-07-21
    • 2010-11-17
    相关资源
    最近更新 更多