当id具有文件扩展名时,ASP.NET MVC 4路由无法正常工作

Pau*_*son 9 c# asp.net asp.net-mvc routing asp.net-mvc-4

在MVC 3中我没有问题,但现在我已经进入了MVC 4.

URL看起来像这样:

{controller}/{action}/{id}

/podcast/file/PODCAST-01.MP4
Run Code Online (Sandbox Code Playgroud)

其中PODCAST-01.MP4是id; 当它到达控制器时,控制器然后将文件发送到客户端,它以这种方式完成,以便我们可以轻松计算下载文件的人数.

但是,现在,Web服务器认为应该有一个文件并给出404错误.我试图通过制作我自己的404错误页面然后用/podcast/file?id=PODCAST-01.MP4重定向来解决这个问题,但这不起作用,因为iTunes不喜欢它,它不喜欢"?".

我尝试创建一条新路线:

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

但这似乎刚刚破坏了路由.任何帮助都会很棒.

Rad*_*u D 8

你可以做到这一点.在MVC 4解决方案中,Web配置包含:

<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" />
Run Code Online (Sandbox Code Playgroud)

您只需在为这个路径添加新处理程序之前添加

<add name="ManagedFileWithExtension" path="podcast/file*" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
Run Code Online (Sandbox Code Playgroud)