Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么在我使用POST时发现WebAPI操作是GET而不是404?_C#_Routing_Asp.net Web Api2 - Fatal编程技术网

C# 为什么在我使用POST时发现WebAPI操作是GET而不是404?

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

我的控制器上有一个名为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();
    }
    [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吗?我想你需要启用它。。。