9

MVC 3では問題はありませんでしたが、今はMVC4に移行しました。

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 に答える