加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – Web Api参数始终为null

发布时间:2020-12-15 21:09:04 所属栏目:asp.Net 来源:网络整理
导读:为什么当我使用下面的ajax调用下面的Post方法时,该参数总是为null? public IEnumerablestring Post([FromBody]string value){ return new string[] { "value1","value2",value };} 这里是通过ajax对Web API方法的调用: function SearchText() { $("#txtSe
为什么当我使用下面的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有效载荷应该是这样的:

=somevalue

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

您可以阅读更多关于Web Api中的模型绑定如何在this article中工作。

但当然这个黑客是一个生病的东西。您应该使用视图模型:

public class MyViewModel
{
    public string Value { get; set; }
}

然后摆脱[FromBody]属性:

public IEnumerable<string> Post(MyViewModel model)
{
    return new string[] { "value1",model.Value };
}

然后使用JSON请求:

$.ajax({
    url: '/api/search',contentType: 'application/json; charset=utf-8',data: JSON.stringify({ value: request.term }),error: function (result) {
        alert('Error');
    }
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读