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中有任何设置?

Asp.NetMVC路由不接受&;在路线上

我知道在web.config中设置此项:<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />

不要这样做,您将删除此请求验证规则提供的所有保护。如果您想允许&字符,然后保留所有其他字符:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,:,',?" />

但我担心当我这样做的时候,我将不得不牺牲安全。

通过这种方式&将被允许出现在您的请求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" />

试试第一行。也许对你有用。