2013-01-11 23 views
7

Trong MVC 3 tôi không có vấn đề gì, nhưng bây giờ tôi đã đi đến MVC 4 tôi làm.ASP.NET MVC 4 định tuyến không hoạt động khi id có phần mở rộng tập tin

URL trông như thế này:

{controller}/{action}/{id} 

/podcast/file/PODCAST-01.MP4 

đâu podcast-01.MP4 là id; khi nó chạm vào bộ điều khiển, bộ điều khiển sau đó sẽ gửi tệp cho máy khách, nó được thực hiện theo cách này để chúng tôi có thể dễ dàng đếm số lượng người đã tải xuống tệp.

Tuy nhiên, hiện tại, máy chủ web, cho rằng phải có tệp ở đó và đưa ra lỗi 404. Tôi đã cố gắng để có được xung quanh điều này bằng cách làm cho trang lỗi 404 của riêng tôi và sau đó chuyển hướng trở lại với /podcast/file?id=PODCAST-01.MP4 nhưng điều này không làm việc vì iTunes không thích nó, nó không thích các "?".

tôi đã cố gắng tạo ra một lộ trình mới:

routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}.{format}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, format = UrlParameter.Optional }); 

Nhưng điều đó dường như đã chỉ phá vỡ định tuyến. Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời.

+2

Khi bạn nói nó phá vỡ các định tuyến, điều gì sẽ xảy ra? Nó có vẻ chính xác trong nháy mắt. – Billdr

+0

Tôi gặp lỗi này khi tôi truy cập vào bất kỳ trang nào: "Lỗi HTTP 403.14 - Bị cấm Máy chủ web được định cấu hình để không liệt kê nội dung của thư mục này". khi tôi thay đổi RouteConfig.cs –

+0

Làm thế nào về việc thêm một phần 'ràng buộc' xác định rõ ràng tên tệp cần có (và không có)? (cũng có, trong lịch sử, gặp rắc rối với [tham số tùy chọn liên tiếp] (http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx)) –

Trả lời

5

Bạn có thể làm điều đó. Trong MVC 4 giải pháp web cấu hình bao gồm:

<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 

Bạn chỉ cần phải thêm trước những một handler mới cho bạn con đường

<add name="ManagedFileWithExtension" path="podcast/file*" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
1

Bạn không thể làm điều đó (tôi nghĩ) Bạn phải nghỉ ngơi hậu tố trong mã phân tích Yêu cầu.

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