C# ASP.NET MVC 5危险请求。检测到路径
我在ASP.NET MVC 5中遇到了一个相当常见的问题,它会对无效的URL字符抛出异常,例如C# ASP.NET MVC 5危险请求。检测到路径,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我在ASP.NET MVC 5中遇到了一个相当常见的问题,它会对无效的URL字符抛出异常,例如&和% 我尝试了许多不同于其他堆栈溢出问题的建议,如和。但是,将此添加到my Web.config不起作用: <system.web> <httpRuntime requestPathInvalidCharacters="<,>,%,:,\,?" requestValidationMode="2.0"/> &l
&
和%
我尝试了许多不同于其他堆栈溢出问题的建议,如和。但是,将此添加到my Web.config不起作用:
<system.web>
<httpRuntime requestPathInvalidCharacters="<,>,%,:,\,?"
requestValidationMode="2.0"/>
</system.web>
在我的控制器方法上方添加[HttpValidate(false)]
也不起作用
我在寻找解决方案时发现了这一点,看起来很有希望,但即使这样也不行。url请求没有被该站点的代码更改,这让我怀疑问题是否在ASP.net有机会采取行动之前发生
我试图避免手动编码我的所有请求,但如果这是我必须做的,那么我想我别无选择
这是我的堆栈跟踪,如果有帮助的话:
[HttpException(0x80004005):潜在危险的请求。从客户端(&)检测到路径值。]
System.Web.HttpRequest.validateInputPrequiredByConfig()+9693412
System.Web.PipelineStepManager.ValidateHelper(HttpContext上下文)+53
我在Web表单应用程序中遇到过这个错误,它通常是由传递给控制器的特殊字符引起的。最简单的解决方案,确保数据在命中控制器之前正确编码。这将是最安全的方法,但是如果您想要一种快速而肮脏的方法,您可以通过
web.config
稍微放松页面/视图的安全性
<!-- Example: 'Web-Config' -->
<location path="test.aspx">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
上文的目的:
如果在HTTP中传递空格和标点符号等字符
流,它们可能在接收端被误解。HTML
编码将HTML中不允许的字符转换为
字符实体等价物;HTML解码与编码相反。对于
例如,当嵌入到文本块中时,字符<和>
编码为<和>,用于HTTP传输
您还可以查找
UrlEncode
和UrlDecode
我不会说这完全解决了我的问题,但它将我推向了正确的方向。我最终编码了我的URL请求,所以我认为它足够接近。谢谢你的帮助。@Fosforus很高兴它起到了作用,是的,很遗憾有些遭遇是一次性的,但通常都是围绕着这种方法来解决的。
HttpUtility.HtmlDecode("...");
HttpUtility.HtmlEncode("...");