事故現場
報錯"從客戶端 中檢測到有潛在危險的Request.Form值"
//后台代碼 namespace Test { [RoutePrefix("TestClass")] [EnableCors("*", "*", "*")] public class TestClassController { [HttpGet] [Route("GetByName/{userId}/{userName}")] public string GetByName(int userId ,string userName ="") { return null; } } }
//前台代碼
//注意userName含有特殊符號
$.ajax({url:"
http://api.test.com/TestClass/GetByName/0/
encodeURIComponent(':#@#')",async:false});
解決方案.Mine
修改為
$.ajax({url:"
http://api.test.com/TestClass/GetByName/0?userName=encodeURIComponent(':#@#')",async:false});
總結.
1.如果請求(Request)的參數(Parameter)里包含特殊字符,記得將參數值編碼 encodeURIComponent(SPECIAL_VALUE)
2.如果含有特殊符號的,比如":",你放到了路徑上, 你編碼應該也不好使.那就將含有特殊符號的,別放到路徑上, 可以放到?的參數上進行傳遞...
解決方案.Other
可以通過將驗證模式設置為ASP.NET之前的版本。 具體步驟是在web.config中加入以下配置: <httpRuntime requestValidationMode=”2.0″ /> 設置了請求模式后,再設置 <system.web> <pages validaterequest=”false”/> </system.web>
MVC框架中,在控制方法前加入: [ValidateInput(false)]屬性。
擴展:
.NET Web API 路由與URL的困惑...(如果將參數放到路徑上,例如:http://www.baidu.com/getById/1,那么這個"1"是參數還是路徑呢?)我還專門去搜了下URL組成部分...
參考:
2.請求(Request)的參數(Parameter)里包含特殊字符(#等)的正確處理方式
x