簡體   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