Jquery.ajax GET没有结束参数

时间:2017-02-16 22:15:14

标签: javascript c# jquery json ajax

我正在为公司内部网上的内容制作区域创建UI。我在之前的项目中创建了中间件API。这是我第一次使用RESTful方法(首先我对Javascript和jquery相当新)

当我从jquery.ajax调用我的调试本地api时,JSON对象没有在我的GET方法上正确传递。

在C#API中

[ActionName("THING")]
        [HttpGet()]
        public string GetThing(object json)
        {
            GetData getData;
            if (json == null)
                return null;
            else if (json is string && (json as string).StartsWith("{"))
                getData = JsonConvert.DeserializeObject<GetData>(json as string);
            else
                return null; 
            ItemReturn retVAl = new ItemReturn();

[logic to use JSON]

return retVal;

在网页

loadThings: function (thingNumber, showBool) {
                showBool = (showBool === true);
                $.ajax({
                    type: "GET",
                    dataType: "json",
                    data: '{ "GetData" : {"ThingNumber":"' + thingNumber + '","Show": ' + showBool + '}}',
                    url: "http://localhost:11422/api/THING/THING/GetThing",
                    contentType: "application/json; charset=utf-8",

                    success: function (result) {

[logic to display things]

}

我可以在GetThing中点击我的breakPoint,让它全部正常工作,但我似乎无法弄清楚为什么我的重载中的对象(json)是null。我知道它是javascript中的东西,我的单元测试工作正常,我的JavaScript让我到了方法中的断点,我只需要重载JSON对象实际传入

更新

它在api方面。我将GetThing的重载从(对象json)更改为([FromUri()]对象json)。这解决了直接问题,但它目前只是将JSON对象转换为空白对象

++注意:我必须将我的post方法重载更改为[FromBody()]而不是[FromUri()],我还没有更新DELETE方法以查看使用哪个

2 个答案:

答案 0 :(得分:0)

您可以尝试添加ajax设置:traditional:true,吗?

答案 1 :(得分:0)

问题1,你不能用GET做到这一点。两个选项

  1. 使用POST
  2. stringify并使用GET
  3. 1)这就是你如何使用POST

    修复您的ajax请求,如下所示:

    $.ajax({
      type: "POST",
      dataType: "json",
      data: { "GetData" : {"ThingNumber": thingNumber ,"Show": showBool }}, // JS object not string
      url: "http://localhost:11422/api/THING/THING/GetThing",
      contentType: "application/json; charset=utf-8",
    

    请阅读$.ajax帖子文档,了解相关说明https://api.jquery.com/jquery.post/

    2)使用GET

    var obj = JSON.stringify({ "GetData" : {"ThingNumber": thingNumber ,"Show": showBool }}),
        url = "http://localhost:11422/api/THING/THING/GetThing?json=" + encodeURIComponent(obj);
    
    $.ajax({
          type: "GET",
          dataType: "json",
          url: url, // Here we encode the obj for server
          contentType: "application/json; charset=utf-8",
    

    如果使用此方法,则必须更改控制器以将json参数作为String,然后使用您选择的库将其解析为JSON。 How can I parse JSON with C#?