0

カスタム ルート ハンドラにルートを登録する次のコードがあります。

 routes.Add(New Route(path & "/{assembly}/{*resource}", New RouteValueDictionary(), New RouteValueDictionary(New With { _
             Key .assembly = AssemblyName _
            }), New EmbeddedContentRouteHandler(PluginAssembly, AssemblyName & "." & path)))

これにより、コンパイル済みの DLL に埋め込まれたリソースにアクセスできます。たとえば、次のようになります。

MVC 3 および 4 では、ProcessRequest 関数は毎回起動しますが、MVC 5 からは起動しません。ディレクトリを指定した場合にのみ起動します。ディレクトリではなくファイルを探しているため、明らかにヌル参照例外が発生します ( 、明らかに、ファイルのように . によって)

.css と .js を除外して、カスタム ルート ハンドラが起動するかどうかを試してみましたが、何もありません。MVC 4 プロジェクトでこれをテストすると、完全に機能します。

私の髪を引き裂き始めます。

MVC 5 では RouteHandler が起動しないのに、MVC 4 および 3 では起動する理由はありますか?

(これは MEF を使用した Pluggable MVC プロジェクトであり、アップグレード パスがうまく機能しなかったため、MVC 5 に 1 つずつ導入しました)

4

1 に答える 1

1

ASP.net 4 以降では、拡張子で終わる URL をインターセプトしません。こちらの解決策に従って、以前の動作に戻してください。

既存のファイルをインターセプトする場合は、ルート構成にこの行を追加することを忘れないでください。

routes.RouteExistingFiles = true;
于 2013-12-04T07:47:46.377 に答える