通过 GET 将 JSON 数组传递给 MVC Web API

Posted

技术标签:

【中文标题】通过 GET 将 JSON 数组传递给 MVC Web API【英文标题】:Passing an JSON array to MVC Web API via GET 【发布时间】:2013-01-15 17:15:45 【问题描述】:

我知道这个主题有很多答案,但找不到我的问题的解决方案。 我有一个如下所示的 ASP.NET MVC Web API:

    [HttpGet]
    public IList<Country> GetCountryList(List<long> idList)

我试过这样称呼它:

    $.ajax(
        dataType: "json",
        data: JSON.stringify(idList: listOfIds),            
        type: "GET",
        url: "api/v1/util/CountryList",
        success: function (result) 
            alert(result);
        
    );

然后 URL 如下所示:

https://localhost/supertext/api/v1/util/CountryList?%22idList%22:[46,14,62,83,120]

替代方案:

    $.ajax(
        dataType: "json",
        data: 
            idList: JSON.stringify(listOfIds),
                  
        type: "GET",
        url: "api/v1/util/CountryList",
        success: function (result) 
            alert(result);
        
    );

网址:

https://localhost/supertext/api/v1/util/CountryList?idList=%5B46%2C14%2C62%2C83%2C120%5D

这两种方法都不起作用。

我真的必须以字符串形式发送和接收它还是使用 POST?

【问题讨论】:

【参考方案1】:

不,不要尝试在 GET 请求中发送 JSON。将 JSON 与其他有主体的动词一起使用,例如 POST 和 PUT。

按照标准方式,用[FromUri] 属性装饰您的操作参数:

public IList<Country> GetCountryList([FromUri] List<long> idList)

    ...

然后就触发AJAX请求:

$.ajax(
    url: 'api/v1/util/CountryList',
    type: 'GET',
    data:  idList: [1, 2, 3] ,
    traditional: true,
    success: function (result) 
        console.log(JSON.stringify(result));
    
);

进一步推荐您阅读有关 Web API 中模型绑定如何工作的内容:

http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1

【讨论】:

谢谢!如果我硬编码数据: idList: [1, 2, 3] ,这有效,但如果我使用数据:JSON.stringify(idList: listOfIds), 但是你为什么要字符串化????不要JSON.stringify 任何东西!我已经告诉你不要在我的回答中使用带有 GET 请求的 JSON。您的请求应如下所示:data: idList: listOfIds 。显然我假设 listOfIds 是一个 javascript 数字数组。 抱歉,花了一点时间才完全理解。现在工作!非常感谢。【参考方案2】:

**下面是两个参数Enum和objSearch **

var 枚举 = "ABCD";

var objSearch = [
              "Name":"Navjot Angra","Age":23,
              "Name":"Nav","Age":22];

//这是ajax方法

$.ajax(

   type: "GET",
   var GatwayUrl ='http//2937/' (//Your url)
   url: GatwayUrl + 'api/Certificate/GetDetail/?Enum=' + Enum +'+&objSearch='+ JSON.stringify(objSearch),
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   success: function (result) 
     if (result) 
        alert("Your Code");    
               
);

//这部分是web api部分

[HttpGet]

public IHttpActionResult Fetch([FromUri]string Enum, [FromUri]string objSearch)

IHttpActionResult 动作=null; 返回动作;

【讨论】:

以上是关于通过 GET 将 JSON 数组传递给 MVC Web API的主要内容,如果未能解决你的问题,请参考以下文章

通过 AJAX 将数组传递给 mvc Action

将JSON数组从javascript传递给spring mvc控制器

如何使用 GET 请求将 JSON 数组传递给 Controller 方法?

使用 jquery.load 将对象数组传递给 MVC 3

通过 GET json 传递给 ajax jquery,

通过 GET 将数组传递给 WCF 服务