2013-03-13 17 views
13

Sadece ASP.NET MVC numaralı yönlendirmeyle çalışmayı öğreniyorum ve IgnoreRoute yöntemini anlamaya çalışıyorum.ASP.NET MVC'de bir yolu yok sayma MVC

Kullanıcıların "Content/{filename}.html" numarasına erişmesini engellemeye çalışıyorum. Bunu RegisterRoutes yöntemimde ilk arama olarak verdim. İşte benim kodudur:

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

ben localhost gibi bir bağlantı erişmeye çalışırsanız: 53907/İçerik/Static.html, benim şimdiye kadar anladığım kadarıyla dosyayı görüntülemek için izin vermemelidir, ancak ekran yapar o.

Neyi yanlış yapıyorum?

+0

ve problem nedir:

içeriği olmalıdır? –

+0

denediniz mi? routes.IgnoreRoute ("İçerik/{* Pathinfo} .html"); – Jon

+0

Eğer böyle bir bağlantıya erişmeye çalışırsam: http: // localhost: 53907/Content/Static.html dosyayı şu ana kadar anladığım kadarıyla göstermeme izin vermemeliydi, ancak görüntülendikten sonra – aleczandru

cevap

16

MVC'deki rotaları dikkate almamak, MVC çerçevesinin bu URL'leri almaması gerektiğini söyleyecektir.

Bu, temel ASP.NET'in size bir statik dosyayı gösterecek şekilde, isteği ele almasına izin vereceği anlamına gelir.

+0

diğer bir deyişle, bu yalnızca bir kullanıcı onu İçerik/{dosyaadı} .html'ye yönlendiren bir bağlantıyı tıklarsa çalışır, ancak bağlantıyı kendisi kendisi belirlerse, o erişime sahip olur. – aleczandru

+0

@aleczandru Hayır, söylediğiniz şey, birisi herhangi bir dosya ile URL/Content [içerik] .html'ye ulaşırsa, o zaman rotayı yok sayılır, ancak yoksayılırsa, işlenmek için ASP.NET'e geçersiniz. URL’ye sizi yönlendirmeden yönlendirirsiniz. – mattytommo

+0

tamam şimdi anlıyorum ben – aleczandru

1

Bu klasöre erişimi gerçekten engellemek istiyorsanız, neden web.config dosyasında tanımlamıyorsunuz?

Bu klasöre bir web.config yerleştirin.

<?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

klasöre erişimi engellemekle ilgili değil, ancak yönlendirmeyi nasıl engellediğimi anladığımı anlatan web.config'i engelleyebilirim, ama yine de cevabınız için teşekkürler – aleczandru