我正在尝试在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)
答案 0 :(得分:2)
重新考虑为什么要以这种格式发送信息。您显示的字符串转换为:
Value="{<dbid>{D576959C-31F8-469B-9C23-17B046DF590F}<dbid>}"
ASP.NET试图保护您免受可能正在尝试注入攻击的黑客的攻击。它看到<dbid>
,它认为他们可能正在尝试将HTML发送到您的服务器。
如果你真的需要支持这种输入,那么你可以在你的动作上使用[AllowHtml]
来告诉ASP.NET你要特别注意不要在没有正确编码的情况下使用这个输入
但我强烈建议您重新思考为什么要以这种方式发送信息。在我看来dbid=D576959C-31F8-469B-9C23-17B046DF590F
可能有用,或者Value={"dbid": "D576959C-31F8-469B-9C23-17B046DF590F"}
。