13

Tôi muốn có định nghĩa một bó như thế này:Có cách nào để có đuôi tệp trong tên gói không?

bundles.Add(
    new StyleBundle("~/style.css").Include(
     //... 
)); 

Nếu tên bó chỉ là "~/style" làm việc này, nhưng với phần mở rộng tập tin nó luôn luôn trả về một 404. Tôi cho rằng các tìm kiếm máy chủ cho CSS và JS các tệp trên ổ đĩa và bỏ qua hệ thống gói, nhưng tôi không thể tìm thấy bất kỳ ai khác đang cố gắng bao gồm các đuôi tệp trong tên gói. Điều này có thể thực hiện mà không có thứ gì đó giống như một URL viết lại không?

Trả lời

19

Bạn có thể thêm dòng sau vào phần <system.webServer> của bạn trong web.config:

<modules runAllManagedModulesForAllRequests="true" /> 

này sẽ đảm bảo rằng các yêu cầu đối với các tài nguyên tĩnh như .js.css sẽ đi qua các module quản lý và bị chặn bởi ASP. NET MVC.

Cách thay thế để bật runAllManagedModulesForAllRequests cho tất cả các yêu cầu bạn chỉ có thể định cấu hình chúng cho các url bạn cần sử dụng. Vì vậy, bên trong các <handlers> thêm như sau:

<handlers> 
    <!-- ... --> 
    <add name="scriptBundle" verb="*" path="script.js" type="System.Web.Optimization.BundleHandler, System.Web.Optimization" preCondition="managedHandler" /> 
    <add name="cssBundle" verb="*" path="style.css" type="System.Web.Optimization.BundleHandler, System.Web.Optimization" preCondition="managedHandler" /> 
</handlers> 
+3

Hmm, có giải pháp ít nghiêm trọng hơn sẽ chỉ ảnh hưởng đến tệp .js và .css? – sbking

+0

Chắc chắn, hãy xem câu trả lời cập nhật của tôi. –

+1

+1 nhưng có 'path =" *. Bundle.js "' sẽ ngăn trình xử lý chạy các tệp thực. –

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