2013-03-13 5 views
13

Я просто учился работать с маршрутизацией в ASP.NET MVC и пытаюсь понять метод IgnoreRoute.Игнорирование маршрута в ASP.NET MVC

Я пытаюсь запретить пользователям получать доступ к "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" } 
    ); 
} 

Если я пытаюсь получить доступ к ссылке как локальный хост: 53907/Content/Static.html, он не должен позволить мне, чтобы отобразить файл от того, что я понимаю, до сих пор, но это делает дисплей Это.

Что я делаю неправильно?

+0

и в чем проблема? –

+0

Вы пробовали? routes.IgnoreRoute ("Содержание/{* PathInfo} .html"); – Jon

+0

, если я попытаюсь получить ссылку на эту ссылку: http: // localhost: 53907/Content/Static.html, она не должна позволять мне отображать файл из того, что я понимаю до сих пор, но он показывает его – aleczandru

ответ

16

Игнорирование маршрутов в MVC скажет, что MVC-структура не будет отображать эти URL-адреса.

Это означает, что это позволит базовому ASP.NET обрабатывать запрос, который с радостью покажет вам статический файл.

+0

, так, другими словами, это будет работать, только если пользователь нажимает ссылку, которая направляет его в Content/{filename} .html, но если он сам набирает ссылку, у него будет доступ. Мне это удалось? – aleczandru

+0

@aleczandru Нет, вы говорите, что если кто-то попадает в URL-адрес/{filename} .html с любым файлом, а затем игнорирует маршрут, но, игнорируя его, вы передаете его ASP.NET для обработки, и это отправляя вас к URL независимо. – mattytommo

+0

ok Спасибо, я понимаю – aleczandru

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

Смежные вопросы