当我使用下面的ajax调用下面的Post方法时,为什么参数总是为null?
public IEnumerable<string> Post([FromBody]string value) { return new string[] { "value1", "value2", value }; }
这是通过ajax对Web API方法的调用:
function SearchText() { $("#txtSearch").autocomplete({ source: function (request, response) { $.ajax({ type: "POST", contentType: "application/json; charset=utf-8", url: "api/search/", data: "test", dataType: "text", success: function (data) { response(data.d); }, error: function (result) { alert("Error"); } }); } }); }
$.ajax({ url: '/api/search', type: 'POST', contentType: 'application/x-www-form-urlencoded; charset=utf-8', data: '=' + encodeURIComponent(request.term), success: function (data) { response(data.d); }, error: function (result) { alert('Error'); } });
基本上,您只能有一个标量类型的参数,该参数用[FromBody]属性装饰,并且您的请求需要使用application/x-www-form- urlencoded,并且POST有效负载应如下所示:
[FromBody]
application/x-www-form- urlencoded
=somevalue
请注意,与标准协议相反,缺少参数名称。您仅发送值。
您可以在中阅读有关Web Api中的模型绑定如何工作的更多信息this article。
this article
但是,当然,这种黑客入侵是一件病态的事情。您应该使用视图模型:
public class MyViewModel { public string Value { get; set; } }
然后摆脱[FromBody]属性:
public IEnumerable<string> Post(MyViewModel model) { return new string[] { "value1", "value2", model.Value }; }
然后使用JSON请求:
$.ajax({ url: '/api/search', type: 'POST', contentType: 'application/json; charset=utf-8', data: JSON.stringify({ value: request.term }), success: function (data) { response(data.d); }, error: function (result) { alert('Error'); } });