SharePoint 中使用Json傳遞數據到後臺的 ashx

 最近項目中遇到需要使用Json傳遞數據到SharePoint後臺的 ashx,goole下方案,但遇到不少問題。最終解決了,把遇到的問題和大家分享下。

function ExecuteAjax(type, url, data, successCallBack, failedCallBack, alwaysCallBack) {
    // Added time stamp,加這個是爲了防止瀏覽器認爲地址一樣的請求可以直接取緩存數據,加了時間戳會讓每次請求的Url不一樣,這樣瀏覽器就不會偷懶了
    if (url.indexOf("?") != -1) {
        url += "timestamp=" + Date.now();
    }
    else {
        url += "?timestamp" + Date.now();
    }
    $.ajax({
            type: type,
            data: JSON.stringify(data), // 一定要用JSON.stringify

            dataType: 'json',
            contentType: 'application/json',
            url: url
       })
        .done( function (result) {            
            successCallBack(result);
        })
        .fail (function(errorMessage)
        {
            if (failedCallBack) {
                failedCallBack(errorMessage);
            }
        })
        .always ( function () {
            if (alwaysCallBack) {
                alwaysCallBack();
            }
        });   
}


data的格式爲

var dataForPost= { "PostId": 1, "WebUrl": 'blog' };


網上有些文章說可以直接在後臺用context.Request.Params['DataKey']來取Json數據,但是我試過是不行的

因此我用的方式是在後臺新建一個類用於接收從Json反序列化回來的對象 

public class PostData
    {
             
        public string PostId { get; set; }
        public string WebUrl { get; set; }       
    }

反序列化

 context.Response.ContentType = "application/json";
 string json = new StreamReader(context.Request.InputStream).ReadToEnd();
 PostData postData = jsonSerializer.Deserialize<PostData>(json);

注意如果在發送數據時沒有用JSON.stringify,返序列化時會出錯。


另外需要注意的是如果在ashx中需要更新SharePoint後臺數據,需要將SPWeb的AllowUnsafeUpdates 屬性設置爲True:
 web.AllowUnsafeUpdates = true;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章