将URL编码的URL作为参数传递给控制器

时间:2012-03-29 06:17:04

标签: c# asp.net-mvc

我有点奇怪的问题。我有一个控制器,它应该接收一个URL作为参数之一。我正在编码URL,并试图像这样调用控制器:

http://www.mysite.com/dowork/1/http%3a%2f%2fwww.otherurl.com

但是,我收到了错误

从客户端(:)检测到潜在危险的Request.Path值。

是什么给出的?有没有办法处理这个没有禁用验证?

2 个答案:

答案 0 :(得分:2)

如果是.NET 4.0,则可以编辑此配置设置:

<system.web>
   <httpRuntime requestPathInvalidCharacters="&lt;,&gt;,%,&amp;,:,\,?" />
</system.web>

如果您不想编辑此内容,您可以另外编码您的传入网址 - 使用自定义编码(如替换危险字符)或使用base64编码或在发送到控制器之前省略协议部分(删除http:// ,如果https://也可以,你需要考虑如何传递它。)

答案 1 :(得分:0)

如果您将其作为查询字符串参数(?path = ....)传递,则可以避免此问题,这些字符仅作为路径的一部分而非法。

如果您坚持将数据作为路径的一部分传递,则需要进行不同的编码,例如将字符串转换为十六进制值或类似值。