C# ASP.NET WebApi Post方法-传递参数时为404
我一辈子都搞不清楚这件事。我有一个带有Get和Post方法的webapi控制器。Get方法在有参数和无参数的情况下都可以正常工作,但是当我尝试向其添加字符串参数时,post会中断。下面是我的代码 路线:C# ASP.NET WebApi Post方法-传递参数时为404,c#,asp.net-web-api,httpwebrequest,C#,Asp.net Web Api,Httpwebrequest,我一辈子都搞不清楚这件事。我有一个带有Get和Post方法的webapi控制器。Get方法在有参数和无参数的情况下都可以正常工作,但是当我尝试向其添加字符串参数时,post会中断。下面是我的代码 路线: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "{controller}/{id}", defaults: new { id =
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = UrlParameter.Optional }
);
控制器:
public class AuditController : ApiController
{
public String Post(String test)
{
return "Success : " + test;
}
public String Get(String test)
{
return "Success : " + test;
}
}
请求:
var request = WebRequest.Create("http://localhost:42652/Audit");
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write("test=TEST");
}
WebResponse webResponse = request.GetResponse();
我已经尝试了很多不同的请求,我觉得我缺少了一些简单的东西。感谢您的帮助。更改您的
AuditController
以包含FromBody
属性:
public class AuditController : ApiController
{
public String Post([FromBody]String test)
{
return "Success : " + test;
}
public String Get(String test)
{
return "Success : " + test;
}
}
cf.因为您希望参数
test
来自请求主体,所以需要使用FromBody
属性对其进行修饰。示例:([FromBody]字符串测试)
。对于其他复杂类型来说,情况并非如此,例如:Employee
class,它被隐式地认为来自Body
重新饲养获得请求。它应该只与来自查询字符串的测试一起工作/Audit?test=Mike
以下博客文章提供了有关参数绑定的更多详细信息:
另外,我看到您正在使用WebRequest。您是否考虑过改用System.Net.Http中的HttpClient?您的路由说它有一个名为
id
的参数,但在您的方法中,您传递了一个名为test
的参数。那是什么?此外,原语类型参数总是试图从Uri中读取,因此post方法无法工作。我真的建议你在ASP.Net主页上学习所有非常好的ASP.NETWebAPI教程!是的。Get方法表示没有{id}参数的路由-因为方法中不存在id参数。当您调用Audit?test=value
,但不是在Audit/value
上时,您的测试参数是可选的查询参数之一。你接受的答案总结得很好,但我仍然鼓励你认真学习教程!我添加了FromBody属性,现在它将到达服务,但不幸的是post方法中的“test”变量为null。我也会看一看HttpClient。试着在你体内发送=TEST
。太棒了!谢谢你对福福福福的见解。为什么?谢谢你,它结束了一个原本烦人的早晨。大部分都是完全不直观的编程决策。