2013-03-13 3 views
13

Sto solo imparando a lavorare con il routing in ASP.NET MVC e sto cercando di capire il metodo IgnoreRoute.Ignorare una route in ASP.NET MVC

Sto tentando di impedire agli utenti di accedere a "Content/{filename}.html". Ho inserito questa come prima chiamata nel mio metodo RegisterRoutes. Qui è il mio codice:

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

Se provo ad accedere ad un link come localhost: 53907/Content/Static.html, non dovrebbe permettere a me di visualizzare il file da quanto ho capito finora, ma lo fa di visualizzazione esso.

Cosa sto sbagliando?

+0

e qual è il problema? –

+0

hai provato? routes.IgnoreRoute ("Contenuto/{*} pathinfo .html"); – Jon

+0

se provo ad accedere a un collegamento come questo: http: // localhost: 53907/Content/Static.html non dovrebbe permettermi di visualizzare il file da quello che ho capito finora, ma lo visualizza – aleczandru

risposta

16

Ignorare percorsi in MVC dirà al framework MVC di non raccogliere tali URL.

Ciò significa che consentirà al sottostante ASP.NET di gestire la richiesta, che mostrerà felicemente un file statico.

+0

quindi in altre parole questo funziona solo se un utente fa clic su un link che lo indirizza a Content/{filename} .html ma se digita il link stesso avrà accesso. Ho capito bene questo? – aleczandru

+0

@aleczandru No, quello che stai dicendo è se qualcuno preme l'URL Content/{filename} .html con qualsiasi file, quindi ignora il percorso, ma ignorandolo, lo passi a ASP.NET per gestirlo e questo è andando a indirizzarti all'URL a prescindere. – mattytommo

+0

ok grazie ora capisco – aleczandru

1

Se si desidera realmente bloccare l'accesso a tale cartella, perché non definirlo in web.config?

Inserire un web.config in quella cartella.

I contenuti dovrebbero essere:

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

non si tratta di bloccare l'accesso alla cartella ma di capire come funziona il routing so che posso bloccare l'accesso web.config, ma grazie comunque per la risposta – aleczandru