Skip to main content
 首页 » 编程设计

c#之为什么当我使用 POST 时,WebAPI 操作发现是 GET 而不是 404

2024年02月01日24dudu

我在我的 Controller 上有一个名为 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 找到操作?

请您参考如下方法:

我找到了答案 here .

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

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

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

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

希望这能让您免于同样的挫败感!