【发布时间】:2014-08-19 17:25:12
【问题描述】:
我正在尝试在 MVC 参数中对 < 和 > 进行编码,尝试使用 encodeURIComponent,但是解码似乎发生在到达控制器之前,它会破坏路由
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Default",
"Home/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
http://localhost/HomeStretch/Home/ListAll?Value=%22%7B%3Cdbid%3E%7BD576959C-31F8-469B-9C23-17B046DF590F%7D%3Cdbid%3E%7D%22"
如果我去掉 <> 插入符号,它会起作用,如果我把它们留在通话中就会失败。我可以使用* 而不是% 进行自己的愚蠢转换,但是我想知道是否有更好的方法来解决这个问题?
原来这可能是一个安全问题,我正在搜索事件日志,发现下面的异常已被抛出。如何正确隔离我的标签,以免发生这种情况?
Exception information:
Exception type: HttpRequestValidationException
Exception message: A potentially dangerous Request.QueryString value was detected from the client (Filters[0].Value=""{<dbid>{D576959C-31F8...").
at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
at System.Web.HttpValueCollection.GetValues(String name)
【问题讨论】:
-
不完全一样的问题,在这种情况下,问题是特殊字符是路由名称的一部分而不是参数本身,但你是对的,它在同一个区域内。跨度>
-
@Mike Cheel,我想那篇文章的要点是不要相信像 encodeURIComponent 这样的标准函数,请自己编写。
-
我想知道 encodeUri 是否为你工作了 encodeUriComponent。可能不是我所看到的,但我不知道您的网址来自哪里以及它是如何生成的。