我不能为我的生活弄清楚这一点。我有一个带有Get和Post方法的web api控制器。使用和不使用参数时,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();
我在请求上尝试了很多变化,我觉得我有一些简单的缺失。谢谢你的帮助。
答案 0 :(得分:21)
由于您希望参数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?
答案 1 :(得分:3)
更改您的AuditController
以包含FromBody
属性:
public class AuditController : ApiController
{
public String Post([FromBody]String test)
{
return "Success : " + test;
}
public String Get(String test)
{
return "Success : " + test;
}
}
比照http://msdn.microsoft.com/en-us/library/system.web.http.frombodyattribute(v=vs.108).aspx