9

在 MVC 3 中我没有问题,但现在我已经去了 MVC 4。

URL 如下所示:

{controller}/{action}/{id}

/podcast/file/PODCAST-01.MP4

其中 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 });

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

4

2 回答 2

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" />

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

<add name="ManagedFileWithExtension" path="podcast/file*" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
于 2013-09-10T07:45:59.970 回答
0

你不能这样做(我认为)你必须在分析请求的代码中保留后缀。

于 2013-01-18T14:54:50.930 回答