jquery ajax没有发布数据

时间:2014-02-16 20:38:47

标签: c# jquery ajax api rest

我遇到了一个我似乎无法弄清楚的问题。我正在进行以下ajax调用:

    var dataArray = { table: "Products" };

        $.ajax({
            url: uri,
            type: "POST",
            cache: false,
            datatype: "json",
            data: dataArray
        })
        .done(function( msg ) {
                 alert( "Data Saved");
             })
        .fail(function () {
            alert("error");
        });

我遇到的问题是,这似乎并没有将我在dataArray中的内容发送到我的Web API控制器,并且不断回复以下响应:

{"Message":"No HTTP resource was found that matches the request URI 'http://myURI'.","MessageDetail":"No action was found on the controller 'MYController' that matches the request."}

令我困惑的是我可以像这样做一个GET,它可以很好地返回数据。此外,如果我只是flatout将查询字符串附加到uri,如

http://myURI?table=Products

然后POST工作正常。我可以这样做,但我很好奇我在上面的方式做错了什么。谢谢!

这就是我的控制器中的内容。我基本上只是想验证我现在可以接受它。

    public void Post(string table)
    {
        string beingHit = "We did it!";
    }

1 个答案:

答案 0 :(得分:0)

问题不一定是您没有将数据发送到Web API。 Web API无法识别它。

在决定哪些Action匹配请求以及如何绑定参数时,Web API(来自the documentation on asp.net)默认应用以下规则:

  

默认情况下,Web API使用以下规则绑定参数:

     
      
  • 如果参数是“简单”类型,Web API会尝试从URI获取值。简单类型包括.NET基元类型(int,bool,double等),以及TimeSpan,DateTime,Guid,decimal和string,以及具有可以从字符串转换的类型转换器的任何类型。 (稍后将详细介绍类型转换器。)
  •   
  • 对于复杂类型,Web API尝试使用媒体类型格式化程序从邮件正文中读取值。
  •   

在您的情况下,您尝试绑定“简单”类型参数(string)。你已经看到它通过查询字符串工作。但是,如果您尝试将其作为请求正文的一部分提交。默认情况下,Web API无法识别它。

为了让Web API能够识别请求正文中的参数,您需要使用FromBody属性在Action签名中指明这一点:

public void Post([FromBody] string table)
{
    string beingHit = "We did it!";
}

这将告诉Web API查看param值的请求体(请注意,您只能在Action中使用它作为一个参数,因此对于像这样的简单类型,最好将它们包含在查询字符串,而[FromBody]非常适合绑定请求正文中包含的复杂类型为Json)。

相关问题