当前位置: 首页 > 面试题库 >

Web Api参数始终为null

伏子辰
2023-03-14
问题内容

当我使用下面的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", "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');
    }
});


 类似资料:
  • 我试图通过web api microsoft应用程序中的post请求传递对象的参数,但传递的参数始终为null。 这是我的控制器的post方法,在调试下程序达到了方法但是dataUrlIN。url字符串始终为空 这是DataUrl的对象 这是post请求的最新版本 在发送post请求后,方法公共无效Post(Data Url dataUrlIN)中的断点被触发,但url字符串为空HelloWorl

  • 问题内容: 我在尝试使用angularjs控制器推送数据时遇到问题。但是我所做的(IFormFile文件)总是空的。只有一些使用razor语法的示例,但是没有使用angular或jquery的示例。 HTML: 指示: 控制者 ASP.NET核心WebAPI: 我还尝试过使用formdata,因为它是在您使用razor语法发布时构造的。像这样: 也代替formData提供原始文件,如我在评论中所写

  • 问题内容: [HttpPost] [Route(“/getter/validatecookie”)] public async Task GetRankings([FromBody] string cookie) { int world = 5; ApiGetter getter = new ApiGetter(_config, cookie); if (!await IsValidCookie(

  • 我是Android的新手,现在我在做一个应用,这个应用我需要把数据发送到服务器上,现在我用的是Volley post方法,但是当我用Volley发送数据到服务器上的时候,参数总是显示为空,这里我附上了代码,请检查一下,这里我用的是片段。

  • 我是新来的百里香,我有以下问题。我想在html模板内调用一个java方法,但该方法需要一个参数,但问题是,无论我为参数传递什么,结果总是空的。 类别。html: 分类控制器:

  • 问题内容: 我有一系列通过jQuery Ajax传递给MVC JsonResult操作的参数。在大多数情况下,它们成功到达,但是有一个Date值根本没有到达。 为了使此日期成功到达,我需要使用什么考虑因素/格式?或者我需要采取什么方法? JsonResult操作: 问题答案: Microsoft使用JavaScriptSerializer对ASP.NET MVC数据进行序列化/反序列化。如果使用格