2013-03-13 80 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