2013-03-13 7 views
13

Ich lerne gerade mit Routing in ASP.NET MVC arbeiten und versuche, die IgnoreRoute-Methode zu verstehen.Ignorieren einer Route in ASP.NET MVC

Ich versuche zu verhindern, dass Benutzer auf "Content/{filename}.html" zugreifen. Ich habe dies als ersten Aufruf in meiner RegisterRoutes-Methode platziert. Hier ist mein Code:

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

Wenn ich versuche, einen Link wie localhost zuzugreifen: 53907/Content/Static.html, es nicht zulassen, soll mich aus der Datei anzuzeigen, was ich verstehe so weit, aber es tut Anzeige es.

Was mache ich falsch?

+0

und was ist das Problem? –

+0

hast du es versucht? routes.IgnoreRoute ("Inhalt/{* pathInfo} .html"); – Jon

+0

Wenn ich versuche, auf einen Link wie diesen zuzugreifen: http: // localhost: 53907/Content/Static.html sollte es mir nicht erlauben, die Datei von dem, was ich bisher verstehe, anzuzeigen, aber es zeigt es – aleczandru

Antwort

16

Das Ignorieren von Routen in MVC weist das MVC-Framework an, diese URLs nicht zu übernehmen.

Dies bedeutet, dass das zugrundeliegende ASP.NET die Anforderung verarbeitet, was Ihnen gerne eine statische Datei anzeigt.

+0

Das funktioniert also nur, wenn ein Benutzer auf einen Link klickt, der ihn auf Content/{filename} .html verweist, aber wenn er den Link selbst eingibt, hat er Zugriff. Habe ich das genau verstanden? – aleczandru

+0

@aleczandru Nein, was Sie sagen, ist, wenn jemand die URL-Inhalt/{Dateiname} .html mit einer beliebigen Datei trifft, dann ignorieren Sie die Route, aber indem Sie es ignorieren, übergeben Sie es an ASP.NET zu handhaben und das ist Ich werde Sie trotzdem zur URL leiten. – mattytommo

+0

ok danke jetzt verstehe ich – aleczandru

1

Wenn Sie den Zugriff auf diesen Ordner wirklich blockieren möchten, definieren Sie ihn in web.config.

Platzieren Sie eine web.config in diesem Ordner.

sollte der Inhalt sein:

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

es geht nicht darum, den Zugriff auf den Ordner zu blockieren, sondern zu verstehen, wie Routing funktioniert Ich weiß, dass ich den Zugriff blockieren konnte web.config, aber danke für die Antwort trotzdem – aleczandru

Verwandte Themen