Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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# 从Fiddler发布到ASP.NET Web API_C#_Asp.net Web Api - Fatal编程技术网

C# 从Fiddler发布到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的“请求主体”部

我有一个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的“请求主体”部分添加了以下内容:

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,只要它有一个参数。