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

本文关键字:URL 参数传递 控制器 编码 | 更新日期: 2023-09-27 18:29:34

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

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

然而,我得到错误

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

什么东西?有什么方法可以在不禁用验证的情况下处理此问题?

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

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

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

如果你不想编辑这个,你可以额外编码你的传入url-使用自定义编码(比如替换危险字符)或使用base64编码,或者在发送到控制器之前尽可能省略协议部分(删除http://,如果https://也是可能的,你需要考虑如何传递)。

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

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