2012-02-17 35 views
15

Tôi khá mới đối với MVC và Định tuyến và tôi đã được yêu cầu sửa đổi một ứng dụng để sử dụng url khác nhau. một nhiệm vụ hơi hơn tôi vì tôi không có kinh nghiệm.Định tuyến ASP.NET MVC - thêm phần mở rộng .html vào các tuyến

ok, cho phép nói chuyện một chút mã:

routes.MapRoute(
"CategoryBySeName", // Route name 
"products/{SeName}", // URL with parameters 
new { controller = "Catalog", action = "CategoryBySeName" } 
); 

này hoạt động như mong đợi, nhưng sau đó các khách hàng muốn ".html" ở phần cuối của con đường, vì vậy tôi đã thay đổi:

"products/{SeName}", // URL with parameters 

tới:

"products/{SeName}.html", // URL with parameters 

mà thất bại (IIS trang 404 - MapRequestHandler) nó có vẻ như IIS là tryin g để tải một tập tin vật lý với tên đó thay vì chuyển nó vào ứng dụng.

tương tự: ASP.NET MVC Routing to start at html page (không trả lời, Không trùng lặp)

+1

Cắm trình gỡ rối tuyến đường vào và xem điều gì đang thực sự xảy ra. http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx –

Trả lời

3

Thay đổi Hồ bơi ứng dụng từ Cổ điển sang Tích hợp đã khắc phục sự cố. cảm ơn bạn đã giúp đỡ.

10

Bạn đang đoán rằng một handler IIS có lẽ grabbing các yêu cầu trước khi MVC là khả năng chính xác.

Giả sử IIS 7: http://technet.microsoft.com/en-us/library/cc770990(v=ws.10).aspx

Bạn cần phải chỉnh sửa handler .html trong IIS sử dụng ASP.NET.

Bạn có thể tìm thấy nó trong thuộc tính trang web trong tab thư mục chính trong cấu hình ứng dụng trong phần ánh xạ trong II6.

Điều gì đó dọc theo dòng (phiên bản có thể khác nhau): C: \ windows \ microsoft.net \ framework \ v4.0.30319 \ aspnet_isapi.dll là những gì bạn cần để xử lý tệp .html.

+2

'' đã thêm địa chỉ này vào web.config của tôi , vấn đề vẫn tồn tại. – Dementic

+0

Tôi không chắc chắn về khả năng làm điều này mà không cần truy cập IIS. Sự hiểu biết của tôi (có thể không chính xác) là IIS xác định nơi gửi yêu cầu dựa trên ánh xạ, và các trình xử lý không thể ghi đè các trình xử lý khác trong các trường hợp bình thường. –

+5

cho bất kỳ ai cũng cần sửa lỗi này trong IIS Express khi gỡ lỗi, tìm biểu tượng IIS Express trong khay hệ thống, "Hiển thị tất cả ứng dụng", chọn ứng dụng của bạn và nhấp vào liên kết đến nguồn cấu hình, sau đó thêm dòng cho "\ * .html "phản ánh tất cả các dòng" \ *. cshtml "trong các nút vị trí/system.webServer/trình xử lý ở dưới cùng. –

3

Chỉ cần thêm phần này vào Web.config và mọi yêu cầu tới tuyến đường/{* pathInfo} sẽ được xử lý bởi trình xử lý được chỉ định, ngay cả khi có dấu chấm trong pathInfo. (Lấy từ ServiceStack MVC chủ Web.config ví dụ và câu trả lời này https://stackoverflow.com/a/12151501/801189)

<location path="route"> 
    <system.web> 
     <httpHandlers> 
     <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" /> 
     </httpHandlers> 
    </system.web> 
    <!-- Required for IIS 7.0 --> 
    <system.webServer> 
     <modules runAllManagedModulesForAllRequests="true" /> 
     <validation validateIntegratedModeConfiguration="false" /> 
     <handlers> 
     <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 
    </system.webServer> 
    </location> 
7

Bạn phải buộc tất cả các yêu cầu thông qua các đường ống dẫn ASP.NET, và bạn có thể làm điều đó bằng cách thêm chỉ dòng này lên web. cấu hình ứng dụng của bạn:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
+0

Điều này làm việc cho ứng dụng ASP.Net MVC 4 của tôi đang chạy trong IIS Express – Jimbo

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