WebAPI.请求(Request)的参数(Parameter)里包含特殊字符(#等)的正确处理方式 从客户端xx中检测到有潜在危险的Request.Form值
事故现场
报错"从客户端 中检测到有潜在危险的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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了