Tôi đang sử dụng MVC4 và cần để định tuyến một yêu cầu như thế này để một bộ điều khiển:Routing một url với phần mở rộng trong MVC4 sẽ không làm việc, cố gắng để phục vụ lên tập tin tĩnh
[myapp]/data/fileinfo.xml
Đây là con đường tôi đã cấu hình:
routes.MapRoute(
name: "Data",
url: "Data/{file}",
defaults: new { controller = "Data", action = "fileinfo"}
);
Bây giờ, công trình này hoàn toàn tốt đẹp và các tuyến đường yêu cầu DataController tôi nếu URL không bao gồm phần mở rộng .xml, nhưng ngay sau khi một phần mở rộng được sử dụng, IIS cố gắng để phục vụ lên một tệp tĩnh (thay vì định tuyến đến bộ điều khiển của tôi) và tôi gặp lỗi 404.
Tôi đã đọc vô số câu hỏi/câu trả lời về vấn đề này trực tuyến và mọi giải pháp tôi đã thử đều không thành công. Ví dụ: tôi đã thử sử dụng RouteExistingFiles = true
khi định cấu hình RouteCollection của mình và tôi đã thêm <modules runAllManagedModulesForAllRequests="true" />
vào web.config, nhưng không có kết quả.
Nếu bất cứ ai có ý tưởng về những gì tôi nên thử hoặc những gì tôi có thể bị thiếu, nó sẽ được nhiều đánh giá cao. Tôi đang sử dụng asp.Net 4.5, VS 2012 và IIS 8.0.
Cảm ơn phản hồi của bạn, tôi thực sự đánh giá cao nó. :) Sau khi thử điều này, tôi sẽ nhận được lỗi 500 khi truy cập url. Thông báo lỗi nói rằng IIS có khả năng nhận được yêu cầu và sau đó thất bại bằng cách nào đó với mô-đun xử lý yêu cầu (chi tiết lỗi tham chiếu ManagedDllExtension và mô-đun ManagedPipelineHandler, nhưng hơi quá mơ hồ để có ích cho tôi). – user2445698
Trong thời gian chờ đợi, tôi đã tìm thấy cách giải quyết khả thi (có thể không đẹp, nhưng nó hoạt động). Tôi đang bắt /data/fileinfo.xml trong Global.asax.cs và sử dụng Context.RewritePath() để cắt phần mở rộng. Sau đó, định tuyến có thể hoạt động bình thường. Cảm ơn bạn đã giúp đỡ. – user2445698
Ah đó là một điều đáng tiếc - đã làm việc hoàn hảo trên máy của tôi :-). Vui mừng khi biết bạn có một giải pháp. Bạn luôn có thể cấu trúc lại vào một ngày sau đó! –