【发布时间】:2014-12-12 15:16:59
【问题描述】:
我有一个 ASP.NET Web API。我正在尝试将字符串发布到端点。我的 ASP.NET Web API 端点如下所示:
[HttpPost]
public async Task<IHttpActionResult> Test(string name)
{
int i = 0;
i = i + 1;
return Ok();
}
在 Fiddler 中,我执行来自作曲家的以下请求:
POST http://localhost:8089/api/MyApiController/test
如果我删除“字符串名称”作为参数,我可以成功执行我的 API 端点。当字符串名称存在时,我收到 405 错误。因此,我在 Fiddler 的“请求正文”部分添加了以下内容:
John
不幸的是,这仍然会导致 405 被抛出。如果我在提琴手中错误地设置了我的请求,我无法判断我是否设置了我的 Web API 端点错误。我的完整请求如下所示:
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标头。 -
看起来您需要
string name上的[FromBody]属性,因为您没有将其包含在 URI 中。 -
@peco - 我添加了 Content-Type。不幸的是,这并没有解决问题。
-
@NWard - 我添加了 [FromBody]。不幸的是,这并没有解决问题。
标签: c# asp.net-web-api