未能在ajax调用asp.net控制器时将非常长的字符串作为参数传递

时间:2014-07-24 08:27:54

标签: c# jquery asp.net ajax

在我的api控制器中,我需要传递两个参数:一个整数+一个字符串。这个字符串是一个json变量,所以它是一个非常长的字符串,我不能作为URL的一部分传递。

我尝试将其作为POST参数传递(在ajax调用的data属性中),但是我收到一个错误:只读取了第一个参数,因此传递的URL不是正确的。

我该怎么做?

修改

JS代码:

    function SavingFloor(FloorId, Json) {
        $.ajax({
            beforeSend: function (xhr) {
                xhr.setRequestHeader('verifySession', verifySession());
                xhr.setRequestHeader('Authorization', '@HttpContext.Current.Session["BaseAuth"]');
            },
            url: "/api/Floor/SaveFloor?FloorID=" + FloorId, //api: error in decoding json (the json can't be passed as parameter)
            type: "POST",
            data: {
                jsonstring: Json
            },
            dataType: 'text/html',
            success: function (data) {
                alert('success');
            }
        });
    }

控制器:

    [HttpPost]
    public void SaveFloor(int floorID, string jsonstring)
    {
        Floor floor = db.FloorSet.Find(floorID);
        JavaScriptSerializer ser = new JavaScriptSerializer();
        Dictionary<string, object> dict = ser.Deserialize<Dictionary<string, object>>(jsonstring);
        floor.SavedJson = jsonstring;
        floorRepository.Update(floor);
        floorRepository.Save();
    }

1 个答案:

答案 0 :(得分:2)

您可以尝试将[FromUri][FromBody]属性添加到SaveFloor方法。您可以定期GET发送floorID,并将长jsonstring作为POST正文发送。目前,Web API只能从POST正文中读取单个参数。您需要将两个变量封装在单个对象中,或者尝试:

public void SaveFloor([FromUri]int floorID, string jsonstring)

您无需将[FromBody]指定为jsonstring,因为它是POST请求中的默认值。 在此之后,请不要忘记更改客户端代码,以便在查询字符串中发送floorID