如何在Web API中读取表单/数据值

时间:2019-01-14 17:49:03

标签: jquery asp.net asp.net-web-api asp.net-web-api2

我试图将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对象获取数据?

1 个答案:

答案 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

尽管总是尽可能使用模型绑定。