2013-03-13 85 views
13

我刚刚学习如何使用ASP.NET MVC中的路由,并试图理解IgnoreRoute方法。我想阻止用户访问"Content/{filename}.html"。我把它作为RegisterRoutes方法中的第一个调用。这里是我的代码:忽略ASP.NET MVC中的路由

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" } 
    ); 
} 

如果我尝试访问本地主机一样的链接:53907 /内容/ Static.html,它不应该让我来显示从到目前为止我所了解的文件,但它确实显示它。

我在做什么错?

+0

和问题是什么? – 2013-03-13 09:11:06

+0

你试过了吗? routes.IgnoreRoute( “内容/ {*} PATHINFO的.html”); – Jon 2013-03-13 09:12:47

+0

如果我试图访问这样的链接:http:// localhost:53907/Content/Static.html它不应该允许我显示目前为止我所了解的文件,但在尝试之后它会显示 – aleczandru 2013-03-13 09:14:10

回答

16

忽略MVC中的路由会告诉MVC框架不要拿起这些URL。

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

+0

所以换句话说,这只会在用户点击指向Content/{filename} .html的链接时才有效,但如果他自己键入链接,他将有权访问。我是否理解了这一点? – aleczandru 2013-03-13 09:25:53

+0

@aleczandru不,你说的是,如果有人点击URL Content/{filename} .html与任何文件,然后忽略路由,但通过忽略它,你传递给ASP.NET来处理,这是无论如何都会将您路由到网址。 – mattytommo 2013-03-13 09:28:26

+0

好的,谢谢,现在我明白了 – aleczandru 2013-03-13 09:30:31

1

如果你真的想阻止访问该文件夹,为什么不在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> 
+1

这不是关于阻止访问文件夹,而是关于如何路由工作我知道我可以阻止访问扔web.config,但感谢您的答案无论如何 – aleczandru 2013-03-13 09:26:37