SharePoint 中使用Json传递数据到后台的 ashx

本文分享了在SharePoint项目中通过Json传递数据到后台ashx处理时遇到的问题及解决方案。尝试使用context.Request.Params获取Json数据失败,改为创建接收类并进行反序列化处理,注意发送时需使用JSON.stringify避免错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 最近项目中遇到需要使用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;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值