Asp.NetMVC路由不接受&;在路线上
本文关键字:在路 amp NetMVC 路由 不接受 Asp | 更新日期: 2023-09-27 18:05:58
我有一个默认的Asp.Net路由,如下所示:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
没有什么特别的。
我在家庭控制器中有一个超级简单的默认操作:
public ActionResult Index(string id)
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
return View();
}
我可以键入URL:http://localhost:12143/Home/Index/HanselandCratel
它工作得很好,但当我输入时
http://localhost:12143/Home/Index/Hansel&板条箱
它不是
我理解&必须进行编码,但当我输入时:
http://localhost:12143/Home/Index/Hansel%26Cratel
它仍然不起作用我得到这个错误:
A potentially dangerous Request.Path value was detected from the client (&).
我知道在web.config中设置这个:
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />
但我担心当我这样做的时候,我将不得不牺牲安全。
除此之外,还有其他选择吗?也许在Asp.Net中有任何设置?
我知道在web.config中设置此项:
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />
不要这样做,您将删除此请求验证规则提供的所有保护。如果您想允许&字符,然后保留所有其他字符:
<httpRuntime requestPathInvalidCharacters="<,>,*,%,:,',?" />
但我担心当我这样做的时候,我将不得不牺牲安全。
通过这种方式&将被允许出现在您的请求URL中。请注意正确验证所有输入参数,并最终根据需要对其进行转义。请注意,这也应该在原始规则到位的情况下进行。。。
你也可以重新加入其他角色,但我建议只有在需要的时候才这样做。你也可以添加新的:有时我有文本ID作为参数(用于AJAX GET请求(,即使我确信我永远不会构建连接字符串的SQL命令。。。我通常添加'(以及其他一些(。
除此之外,还有其他选择吗?也许在Asp.Net中有任何设置?
是的,你可以回到.NET 2.0规则,但我认为没有理由这么做…
[ValidateInput(false)] //write this
public ActionResult Index(string id)
{
ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";
return View();
}
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />
<pages validaeRequest="false" />
试试第一行。也许对你有用。