我有一个ASP.NET Web API。我正在尝试将字符串POST到端点。我的ASP.NET Web API端点如下:
[HttpPost]
public async Task<IHttpActionResult> Test(string name)
{
int i = 0;
i = i + 1;
return Ok();
}
在 Fiddler 中,我从 Composer 执行了如下请求:
POST http://localhost:8089/api/MyApiController/test
如果我将 "string name" 参数移除,就可以成功执行我的API端点。当存在字符串名称时,会出现405错误。因此,我在Fiddler的"请求正文"部分中添加了以下内容:
John
不幸的是,这仍然会导致抛出405错误。我无法确定我是否设置了错误的Web API端点,或者我是否在fiddler中设置了错误的请求。我的完整请求如下:
POST http://localhost:8089/api/MyApiController/test HTTP/1.1
User-Agent: Fiddler
Host: localhost:8089
Content-Length: 26
Content-Type: application/json; charset=utf-8
{ "name" : "John"}
响应的格式如下所示:
HTTP/1.1 405 Method Not Allowed
Cache-Control: no-cache
Pragma: no-cache
Allow: GET
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/8.0
X-SourceFiles: =?UTF-8?B?QzpcRWNvZmljXFNvbGlkUVxKTExcamxsLW1hcmtldHNwaGVyZVxXZWJzaXRlXGFwaVxTZWFyY2hBcGlcaW5kZXg=?=
X-Powered-By: ASP.NET
Date: Fri, 12 Dec 2014 15:51:50 GMT
Content-Length: 73
{"Message":"The requested resource does not support http method 'POST'."}
我不明白为什么在没有参数的情况下允许使用POST,但是当我添加参数时,POST就无法工作了。
[更新] 我在我的C#代码中添加了以下内容:
var content = await Request.Content.ReadAsStringAsync();
我认为JSON会在content
中。然而,content
只是一个空字符串。
Content-Type: application/json
头部。 - pecostring name
上加上[FromBody]
属性,因为你没有将它包含在 URI 中。 - NWard