2009-09-17 22 views
11

Tôi có một bộ điều khiển MVC được gọi là Tải xuống. http://mysite/DownloadsLàm thế nào để có thư mục và bộ điều khiển có cùng tên trong ASP.NET MVC?

Tôi cũng muốn đặt một tệp vật lý vào một thư mục vật lý có tên là http://mysite/Downloads/MyFile.zip.

Nếu tôi chỉ cần tạo thư mục, tôi nhận được 403 khi duyệt đến http://mysite/Downloads. (Rất có thể là do duyệt thư mục bị tắt) Nhưng tôi muốn trình điều khiển MVC khởi động.

Tôi làm như thế nào?

Trả lời

5

Nếu bạn duyệt đến http://mysite/Downloads/{ACTION} nó sẽ kích hoạt hành động bộ điều khiển của bạn.

Điều duy nhất không hoạt động trong ví dụ của bạn là /Downloads mà không có hành động nào. Bạn có thể viết lại URL này để chuyển hướng bạn đến hành động mặc định của bạn.

Ngoài ra, bạn sẽ cần phải có bộ định tuyến bỏ qua các tệp tải xuống của bạn. Bạn có thể thêm một dòng trong tệp global.asax của bạn để bỏ qua tất cả các tệp zip hoặc một số mẫu bỏ qua khác phù hợp.

routes.Ignore("{resource}.zip"); 
4

Kể từ .NET 3.5, bạn có thể định tuyến các file hiện có:

public static void RegisterRoutes(RouteCollection routes) { 
    routes.RouteExistingFiles = true; 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", 
          action = "Index", 
          id = UrlParameter.Optional } 
    ); 
} 

Vì vậy, giả sử chúng ta có một thư mục vào thư mục gốc trang web được gọi Markets chứa một tập tin audio.mp3:

\Markets 
\Markets\audio.mp3 

Giả sự tồn tại của một MarketsController, nếu chúng tôi thực hiện một yêu cầu cho Markets, nó sẽ được chuyển đến Markets/Index.

Nếu chúng tôi yêu cầu /Markets/audio.mp3, chúng tôi sẽ nhận tệp mp3 và nếu chúng tôi yêu cầu Markets/AnythingElse, định tuyến thông thường sẽ được áp dụng.

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