C# 从Fiddler发布到ASP.NET Web API
我有一个ASP.NETWebAPI。我正在尝试将字符串发布到端点。我的ASP.NET Web API端点如下所示:C# 从Fiddler发布到ASP.NET Web API,c#,asp.net-web-api,C#,Asp.net Web Api,我有一个ASP.NETWebAPI。我正在尝试将字符串发布到端点。我的ASP.NET Web API端点如下所示: [HttpPost] public async Task<IHttpActionResult> Test(string name) { int i = 0; i = i + 1; return Ok(); } 如果删除“stringname”作为参数,则可以成功执行API端点。当字符串名存在时,我得到一个405错误。因此,我在Fiddler的“请求主体”部
[HttpPost]
public async Task<IHttpActionResult> Test(string name)
{
int i = 0;
i = i + 1;
return Ok();
}
如果删除“stringname”作为参数,则可以成功执行API端点。当字符串名存在时,我得到一个405错误。因此,我在Fiddler的“请求主体”部分添加了以下内容:
John
不幸的是,这仍然会导致抛出405。如果我在fiddler中设置的请求不正确,我无法判断我是否设置的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 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#代码中添加了以下内容:
我想JSON应该在
内容中。但是,内容
只是一个空字符串。在作曲家的主体部分尝试
{ "name" : "somtext"}
在正文中,您需要添加Json或XML语法,而不仅仅是Asp.Net反序列化程序的名称。Json将是:
{ "name" : "John" }
编辑:如果您使用的是默认路由,那么您的url路由似乎也不正确。默认情况下,它将被拾取为:POSThttp://localhost:8089/api/MyApiController/
省略“测试”部分,因为它将此识别为POST方法。您的操作还应该指定您在body公共异步任务测试([FromBody]string name)
中接受的参数(“name”)。现在,如果您执行以下操作,您的url将匹配:
`POST http://localhost:8089/api/MyApiController/`
User-Agent: Fiddler
Host: localhost:8089
Content-Length: 26
{ "name" : "John" }
在“Composer”选项卡下:
我建议你应该试试下面的网址
http://localhost:8089/api/MyApi/test
我认为问题出在路线上
您应该有一些如下的路由作为默认路由,只有控制器/id。此路由位于默认路由之前
config.Routes.MapHttpRoute(
name: "DefaultApi1",
routeTemplate: "api/{controller}/{action}",
defaults: new { action="test" }
);
你的动作应该是这样的
[HttpPost]
public async Task<IHttpActionResult> Test([Frombody]string name)
{
int i = 0;
i = i + 1;
return Ok();
}
[HttpPost]
公共异步任务测试([Frombody]字符串名称)
{
int i=0;
i=i+1;
返回Ok();
}
在下面,我将参数的数据类型从string修改为object,并获得了成功
public async Task<IHttpActionResult> Post( [ FromBody ] **object** items )
{
Console.WriteLine( items );
return Ok();
}
公共异步任务发布([FromBody]**对象**项)
{
控制台写入线(项目);
返回Ok();
}
不幸的是,我仍然得到了405。好的,可能需要更多的细节。你能把fiddler的完整请求添加到你的帖子中吗?还可能有助于显示路由的定义方式/位置(即默认路由或属性路由?)。我添加了请求和对上述问题的响应的全文。谢谢您的帮助。@user687554更新了我的答案。我对此进行了测试,似乎有效。还测试了您最初的描述,并获得了405分,如编辑中所述。感谢您的帮助。我想离这里更近了。当我从Fiddler发帖时,我的断点被击中了。但是,参数值始终为null
。为什么会这样?可能还需要添加一个头,指定您正在使用json。内容类型:application/json没有忘记请求中的内容类型:application/json
头。看起来您需要[FromBody]
属性,因为您没有将其包含在URI中。@peco-I添加了内容类型。不幸的是,这并没有解决问题。@NWard-I添加了[FromBody]。不幸的是,这并没有解决问题。当我发布到操作时,我仍然收到405,只要它有一个参数。