【问题标题】:Ignoring a route in ASP.NET MVC忽略 ASP.NET MVC 中的路由
【发布时间】:2013-03-13 08:58:35
【问题描述】:

我刚刚在ASP.NET MVC 中学习使用路由,并且正在尝试理解 IgnoreRoute 方法。

我试图阻止用户访问"Content/{filename}.html"。我已将此作为我的 RegisterRoutes 方法中的第一个调用。这是我的代码:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("Content/{filename}.html");
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


    routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    new { controller = "^.*", action = "^Index$|^About$" },
                    new[] { "UrlsAndRoutes.AditionalControllers" });
    routes.MapRoute("MyRoute2", "{controller}/{action}/{id}/{*catchall}",
                   new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    new { controller = "^.*", action = "^Index$|^About$" },
                   new[] { "UrlsAndRoutes.Controllers" });
    routes.MapRoute("ShopSchema2", "Shop/OldAction", new { controller = "Home", action = "Index" });
    routes.MapRoute("ShopSchema", "Shop/{action}", new { controller = "Home" });
    routes.MapRoute("", "X{controller}/{action}");

    routes.MapRoute(
       name: "",
       url: "{controller}/{action}",
       defaults: new { controller = "Home", action = "Index" }
   );
}

如果我尝试访问 localhost:53907/Content/Static.html 之类的链接,它不应该让我根据我目前的理解显示该文件,但它确实会显示它。

我做错了什么?

【问题讨论】:

  • 还有什么问题?
  • 你试过了吗? routes.IgnoreRoute("Content/{*pathInfo}.html");
  • 如果我尝试访问这样的链接:localhost:53907/Content/Static.html 它不应该让我根据我目前的理解显示该文件,但它确实显示它
  • 尝试后:routes.IgnoreRoute("Content/{*pathInfo}.html");我收到此错误:包含多个部分(例如文字部分或参数)的路径段不能包含包罗万象的参数。

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing


【解决方案1】:

忽略 MVC 中的路由将告诉 MVC 框架不要拾取这些 URL。

这意味着它将让底层的 ASP.NET 处理请求,它会愉快地向您显示一个静态文件。

【讨论】:

  • 所以换句话说,这只有在用户点击将他定向到 Content/{filename}.html 的链接时才有效,但如果他自己键入链接,他将有权访问。我是否明白这一点正确吗?
  • @aleczandru 不,你的意思是如果有人用任何文件点击 url Content/{filename}.html,然后忽略路由,但是忽略它,你将它传递给ASP.NET 来处理,并且无论如何都会将您路由到 URL。
  • 如果我写 routes.IgnoreRoute("Resources/Desert.jpg");并在该图像的索引方法视图中创建一个超链接,然后我单击超链接它会将我重定向到该图像或者它会忽略这个?
【解决方案2】:

如果你真的想阻止对该文件夹的访问,为什么不在 web.config 中定义它?

在该文件夹中放置一个 web.config。

内容应该是:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <authorization>
          <!-- <allow roles="admin" /> --> //In case you want to give access to admin only.
          <deny users ="*" />
        </authorization>
    </system.web>
</configuration>

【讨论】:

  • 这不是关于阻止对文件夹的访问,而是关于了解路由的工作原理我知道我可以阻止访问抛出 web.config ,但无论如何感谢您的回答
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多