分两种情况
1json字符
前端代码
var data = { SignatureStr: '5kESq0Dly1T/tngzmmaMQA==', } $.ajax({ url: 'XXX.ashx?action=regist', data: JSON.stringify(data),//'{'SignatureStr':'5kESq0Dly1T/tngzmmaMQA=='}' contentType: 'application/json; charset=utf-8', dataType: 'json', type: 'post', success: function(data) { }, error: function(data) { } });
后端
public void ProcessRequest(HttpContext context) { context.Response.ContentType = 'application/json'; //context.Response.Write('Hello World'); string action = context.Request['action'] == null ? '' : context.Request['action'].ToString(); switch (action) { case 'regist': Regist(context); break; default: break; } } public void Regist(HttpContext context) { JavaScriptSerializer serializer = new JavaScriptSerializer(); StreamReader reader = new StreamReader(context.Request.InputStream); String decodeStr = HttpUtility.UrlDecode(reader.ReadToEnd()); JavaScriptSerializer jss = new JavaScriptSerializer(); //将json字符串反序列化成一个Dictionary对象 Dictionary<String, Object> dicParameter = jss.Deserialize<Dictionary<String, Object>>(jsonStr); }
完美,没任何问题
2 json对象
前端代码
var data = { SignatureStr: '5kESq0Dly1T/tngzmmaMQA==', id=0 } $.ajax({ url: 'XXX.ashx?action=regist', data: data,//{'SignatureStr':'5kESq0Dly1T/tngzmmaMQA==','id':'0'} contentType: 'application/json; charset=utf-8', dataType: 'json', type: 'post', success: function(data) { }, error: function(data) { } });
后端
public void ProcessRequest(HttpContext context) { context.Response.ContentType = 'application/json'; //context.Response.Write('Hello World'); string action = context.Request['action'] == null ? '' : context.Request['action'].ToString(); switch (action) { case 'regist': Regist(context); break; default: break; } } public void Regist(HttpContext context) { StreamReader reader = new StreamReader(context.Request.InputStream); String decodeStr = HttpUtility.UrlDecode(reader.ReadToEnd()); //decodeStr: SignatureStr=5kESq0Dly1T/tngzmmaMQA==&id=0 NameValueCollection nvc=new NameValueCollection(); ParseUrl(decodeStr,out nvc); } public void ParseUrl(string deCodeParams,out NameValueCollection nvc) { if (deCodeParams == null) throw new ArgumentNullException('deCodeParams'); nvc = new NameValueCollection(); if (deCodeParams == '') return; // 开始分析参数对 Regex re = new Regex(@'(^|&)?(\w+)=([^&]+)(&|$)?', RegexOptions.Compiled); MatchCollection mc = re.Matches(deCodeParams); foreach (Match m in mc) { nvc.Add(m.Result('$2').ToLower(), m.Result('$3')); } }
这样也可以解决
遇到的坑
当初自己写了个处理decode后的url值
private string GetJsonString(string UrlDecode)
{
return “{”'+UrlDecode.Replace('=', “”:'').Replace('&','','')+''}';
}
遇到这种 “5kESq0Dly1T/tngzmmaMQA==”,出问题了,遂bd遇见上述reg的写法,可以正确解决问题
但有没有更完美的方式呢
联系客服