2013-03-13 38 views
13

Tôi chỉ học cách làm việc với định tuyến trong ASP.NET MVC và đang cố gắng hiểu phương thức IgnoreRoute.Bỏ qua một lộ trình trong ASP.NET MVC

Tôi đang cố ngăn người dùng truy cập "Content/{filename}.html". Tôi đã đặt đây là cuộc gọi đầu tiên trong phương thức RegisterRoutes của mình. Đây là mã của tôi:

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

Nếu tôi cố gắng truy cập vào một liên kết như localhost: 53.907/Content/Static.html, nó nên không cho phép tôi để hiển thị các tập tin từ những gì tôi hiểu cho đến nay, nhưng nó hiển thị nó.

Tôi đang làm gì sai?

+0

và vấn đề là gì? –

+0

bạn đã thử chưa? routes.IgnoreRoute ("Nội dung/{* pathInfo} .html"); – Jon

+0

nếu tôi cố gắng truy cập một liên kết như thế này: http: // localhost: 53907/Content/Static.html nó không cho phép tôi hiển thị tệp từ những gì tôi hiểu cho đến nay, nhưng nó hiển thị nó – aleczandru

Trả lời

16

Bỏ qua các tuyến đường trong MVC sẽ cho khung MVC không nhận các URL đó.

Điều này có nghĩa là nó sẽ cho phép ASP.NET xử lý yêu cầu, điều này sẽ cho bạn thấy một tệp tĩnh.

+0

vì vậy nói cách khác, điều này sẽ chỉ hoạt động nếu người dùng nhấp vào liên kết hướng anh ta đến Content/{filename} .html nhưng nếu anh ấy tự mình liên kết, anh ấy sẽ có quyền truy cập. – aleczandru

+0

@aleczandru Không, những gì bạn đang nói là nếu ai đó truy cập url Content/{filename} .html với bất kỳ tệp nào, sau đó bỏ qua tuyến đường, nhưng bằng cách bỏ qua nó, bạn chuyển nó sang ASP.NET để xử lý và đó là sẽ định tuyến bạn đến URL bất kể. – mattytommo

+0

ok cảm ơn bây giờ tôi hiểu – aleczandru

1

Nếu bạn thực sự muốn chặn truy cập vào thư mục đó, tại sao không xác định nó trong web.config?

Đặt web.config vào thư mục đó.

Nội dung nên là:

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

nó không phải là về chặn truy cập vào thư mục nhưng về sự hiểu biết cách thức hoạt động định tuyến Tôi biết rằng tôi có thể chặn truy cập đã ném web.config, nhưng cảm ơn cho câu trả lời anyway – aleczandru

Các vấn đề liên quan