gpt4 book ai didi

asp.net - Web Api 参数始终为空

转载 作者:行者123 更新时间:2023-12-03 07:54:47 29 4
gpt4 key购买 nike

为什么当我使用下面的 ajax 调用下面的 Post 方法时参数总是为空?

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 有效载荷应该如下所示:
=somevalue

请注意,与标准协议(protocol)相反,缺少参数名称。您只发送值(value)。

您可以在 this article 中阅读有关 Web Api 中模型绑定(bind)如何工作的更多信息。 .

但当然,这种黑客行为是一件病态的事情。您应该使用 View 模型:
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');
}
});

关于asp.net - Web Api 参数始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14624306/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com