ASP.. NET WebApi Post方法- 404传递参数时
本文关键字:参数 NET WebApi Post 方法 ASP | 更新日期: 2023-09-27 18:17:50
我怎么也想不明白。我有一个web api控制器与Get和Post方法。Get方法在有参数和没有参数的情况下工作得很好,但是当我试图向它添加一个String参数时,帖子中断了。下面是我的代码。
路线:
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();
我已经尝试了很多不同的要求,我觉得有一些简单的我错过了。谢谢你的帮助。
由于您期望参数test
来自请求的主体,因此您需要用FromBody
属性来装饰它。例如:([FromBody]String test)
。对于其他复杂类型,这是不正确的,例如:Employee
类,它被隐式地认为来自Body。
关于GET请求。它应该只与来自查询字符串/Audit?test=Mike
下面的博文有更多关于参数绑定的细节:http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx
另外,我看到你正在使用WebRequest。你考虑过使用System.Net.Http的HttpClient吗?
更改AuditController
以包含FromBody
属性:
public class AuditController : ApiController
{
public String Post([FromBody]String test)
{
return "Success : " + test;
}
public String Get(String test)
{
return "Success : " + test;
}
}
cf。http://msdn.microsoft.com/en-us/library/system.web.http.frombodyattribute (v = vs.108) . aspx