繁体   English   中英

为什么在使用POST时发现WebAPI操作为GET但为404?

[英]Why is WebAPI action found as GET but 404 when I use POST?

我在控制器上有一个名为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。

邮递区号

    [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 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找到操作?

我在这里找到了答案。

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

首先,我需要在参数前面添加[FromBody]属性,因为这是我要从中提取模型绑定的地方。

但是,对于任何给定的操作,WebAPI似乎也只允许一个[FromBody]参数。 因此,我最后要做的是创建一个模型,该模型封装了我的所有值并更改了方法定义,如下所示:

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

希望这可以使您摆脱同样的挫败感!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM