項目經測試,發現從IE提交的數據,漢字會變成亂碼,實驗了網上很多網友說的給ajax加上contentType:"application/x-www-form-urlencoded; charset=UTF-8",發現沒有用(ajax的請求標頭確實變了,但是還是會亂碼)
於是開始試驗進行URL編碼解碼,一開始我是很不想這么干,因為這意味着我的后台也要對應的解碼,現在沒辦法了,於是考慮用一個過濾器將客戶端傳過來的參數全部解碼后再執行方法,沒什么好說的,實現如下:
public class UrlDecodeFilter : ActionFilterAttribute { public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) {
var task = actionExecutedContext.Response.Content.ReadAsStringAsync();
HttpContent content = new StringContent(HttpUtility.UrlEncode(task.Result));
actionExecutedContext.Response.Content = content;
base.OnActionExecuted(actionExecutedContext);
} public override void OnActionExecuting(HttpActionContext actionContext) { Dictionary<string, object> Param = actionContext.ActionArguments; Dictionary<string, string> ParamTemp = new Dictionary<string, string>(); foreach (string item in Param.Keys) { object Value = Param[item]; if (Value == null) continue; string StrValue = Value.ToString(); if (string.IsNullOrEmpty(StrValue)) continue; ParamTemp.Add(item, HttpUtility.UrlDecode(StrValue).Replace("??", "")); } foreach (var item in ParamTemp.Keys) { actionContext.ActionArguments[item] = ParamTemp[item]; } base.OnActionExecuting(actionContext); } }
MVC里面和這個類似,只是使用的屬性不一樣。
對於為什么解碼會出現“??”兩個問號,我不知道,如果有知道的朋友希望不吝賜教