C# 为什么在我使用POST时发现WebAPI操作是GET而不是404?
我的控制器上有一个名为GetPhotos的操作。当我使用适当的参数调用动作作为GET时,就会调用该动作,并且一切都很好。(我正在使用属性路由) 获取代码C# 为什么在我使用POST时发现WebAPI操作是GET而不是404?,c#,routing,asp.net-web-api2,C#,Routing,Asp.net Web Api2,我的控制器上有一个名为GetPhotos的操作。当我使用适当的参数调用动作作为GET时,就会调用该动作,并且一切都很好。(我正在使用属性路由) 获取代码 [Route("getphotos")] public IHttpActionResult GetPhotos(string userid, string password, string system, string outstation, string systemno, string version, string com
[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();
}
[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();
}
接听电话
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
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
然而,当我将操作更改为HttpPost并将我的呼叫更改为POST呼叫(通过Fiddler)时,我得到了404
邮政编码
[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();
}
[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();
}
电话留言
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
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
为什么我在帖子中找不到动作?我找到了答案
显然,我有两件事做错了。我已经习惯了MVC,并且尝试用MVC方式而不是WebAPI方式来做事情
首先,我需要在参数前面使用[FromBody]属性,因为我希望从中提取模型绑定
但是,对于任何给定的操作,WebAPI似乎只允许一个[FromBody]参数。因此,我最后做的是创建一个模型,该模型封装了我的所有值,并将我的方法定义更改为如下所示:
public IHttpActionResult GetPhotos([FromBody] GetPhotoModel model) { ... }
希望这能让你免于同样的挫折 我找到了答案
显然,我有两件事做错了。我已经习惯了MVC,并且尝试用MVC方式而不是WebAPI方式来做事情
首先,我需要在参数前面使用[FromBody]属性,因为我希望从中提取模型绑定
但是,对于任何给定的操作,WebAPI似乎只允许一个[FromBody]参数。因此,我最后做的是创建一个模型,该模型封装了我的所有值,并将我的方法定义更改为如下所示:
public IHttpActionResult GetPhotos([FromBody] GetPhotoModel model) { ... }
希望这能让你免于同样的挫折 尝试更改发布方法的名称:
GetPhotos
=>PostPhotos
。是否启用了CORS?我想您需要启用它…尝试更改您的POST方法的名称:GetPhotos
=>PostPhotos
。您启用了CORS吗?我想你需要启用它。。。