私の Web アプリケーションには、次のようなルートがあります。
routeCollection.MapRoute(
"AdfsMetadata", // name
"FederationMetadata/2007-06/FederationMetadata.xml", // url
new { controller = "AdfsController", action = "MetaData" }); // defaults
このルートの背後にある考え方は、ホスト名を指定するだけでこの時点で AD FS メタデータを検索する Microsoft AD FS サーバー (2.0+) との連携を改善することでした。MVC3 ではすべて正常に動作しました。しかし、最近プロジェクトを MVC4 にアップグレードしたところ、この URL の呼び出しで 404 が発生しました。エラー ページに記載されているハンドラーはStaticFile
で、物理パスはD:\path\to\my\project\FederationMetadata\2007-06\FederationMetadata.xml
です。MVCまたはASP.NETは、静的ファイルの要求である必要があると「考え」、ファイルを探していると思いますが、ファイルではありません。データは動的に生成されます。そのため、URL をコントローラー アクションにルーティングしました。問題は、Phil Haack による Route Debugger でさえ動作しないことです。これは単なる 404 であり、IIS が存在しない物理ファイルにアクセスしようとしたこと以外の情報はありません。
誰かがこれに対する解決策を持っていますか? この URL をコントローラー アクションにルーティングしたいだけです。
PS:原因が MVC4 へのアップグレードであったことを100%確信しているわけではありません。アップグレードとほぼ同時にエラーが発生したため、推測であり、MVC3 を使用している別のプロジェクトでも同じルートが機能します。
編集:
ControllerFactory
完全なクラス名 (AdfsController
の代わりにAdfs
)が必要なカスタムがあるController
ため、この場合は接尾辞が正しいです。