我试图将POST
Json
数据发送到API
,并使用HttpContext.Current.Request
对象从键中读取值。
客户端:
var data = { Name: "Tom" };
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(data),
dataType: "json",
contentType: "application/json",
success: function (response) {
}
});
在API中:
[HttpPost]
[Route("UploadProduct")]
public HttpResponseMessage Upload()
{
if (string.IsNullOrEmpty(HttpContext.Current.Request["Name"]))
return "Name is missing";
//... removed for brevity
}
为什么键名始终为空?
我知道Json
数据将仅绑定到模型对象。但是想知道是否可以通过在客户端进行一些更改来从HttpContext.Current.Request
对象获取数据?
答案 0 :(得分:2)
确定,请尝试以下操作:
将contentType
更改为application/x-www-form-urlencoded
,删除JSON.stringify()
并按原样传递JSON数据。这样,您应该可以使用this.Request.Form["Name"]
或仅使用this.Request["Name"]
甚至是HttpContext.Current.Request["Name"]
来获取表单值。
当您将POST
数据发送到服务器时(尤其是application/x-www-form-urlencoded
以外的内容类型),该内容将被放置在Request
主体中,因此该内容将无法用于读取Request.Form
名称-值集合对象。
对于嵌套数据,您可以像使用Javascript对象文字一样查询值,例如:
var data = {
Name: "Tom",
Address: {
Street: "ABC"
}
}
this.Request.Form["Address[Street]"] // ABC
尽管总是尽可能使用模型绑定。