繁体   English   中英

无法在ajax调用中将非常长的字符串作为参数传递给asp.net控制器

[英]Failing to pass a very long string as parameter in an ajax call to an asp.net controller

在我的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();
    }

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM