我有点奇怪的问题。我有一个控制器,它应该接收一个URL作为参数之一。我正在编码URL,并试图像这样调用控制器:
http://www.mysite.com/dowork/1/http%3a%2f%2fwww.otherurl.com
但是,我收到了错误
从客户端(:)检测到潜在危险的Request.Path值。
是什么给出的?有没有办法处理这个没有禁用验证?
答案 0 :(得分:2)
如果是.NET 4.0,则可以编辑此配置设置:
<system.web>
<httpRuntime requestPathInvalidCharacters="<,>,%,&,:,\,?" />
</system.web>
如果您不想编辑此内容,您可以另外编码您的传入网址 - 使用自定义编码(如替换危险字符)或使用base64编码或在发送到控制器之前省略协议部分(删除http:// ,如果https://也可以,你需要考虑如何传递它。)
答案 1 :(得分:0)
如果您将其作为查询字符串参数(?path = ....)传递,则可以避免此问题,这些字符仅作为路径的一部分而非法。
如果您坚持将数据作为路径的一部分传递,则需要进行不同的编码,例如将字符串转换为十六进制值或类似值。