RouteExistingFilesの仕組みを理解しようとしています。 私は新しいMVC 3インターネットプロジェクトを作成しました(MVC 4は同じように動作します)。プロジェクトのコンテンツフォルダにHTMLPage.htmlファイルを配置します。 は、今私はGlobal.asaxファイルに行って、それは次のようになりますので、RegisterRoutes機能を編集した:私はローカルホストを要求していたときにASP.NET MVC 3:RouteExistingFiles = trueは無効です。
public static void RegisterRoutes(RouteCollection routes)
{
routes.RouteExistingFiles = true; //Look for routes before looking if a static file exists
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new {controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
);
}
今では私にエラーを与える必要があります:XXXX /コンテンツ/ HTMLPage.htmlを「コンテンツ」コントローラがなく、リクエストが確実にデフォルトのパターンに当たるからです。しかし代わりに私は自分のHTMLPageを見ている。 ここで何が間違っていますか?
更新: 私はあきらめなければならないと思う。 私はこのようなルートを追加している場合でも:
routes.MapRoute("", "Content/{*anything}", new {controller = "Home", action = "Index"});
それはまだ私にHTMLページの内容を示しています。 〜/ Content/HTMLPageのようなURLをリクエストすると、インデックスページが期待どおりに表示されますが、.htmlや.txtなどのファイル拡張子を追加すると、コンテンツが表示されます(ファイルが存在しない場合は404エラー)。 誰でもVS2012でこれをチェックできる場合は、あなたが得ている結果をお知らせください。 ありがとうございます。
"{controller}/{action}/{id}"パターンのデフォルトルートは〜/ Content/HTMLPage.htmlリクエストの良い候補のようです。だから、一致するルートがあります。 –
@OleksandrKaplun: "Content"という名前のコントローラと、そのコントローラのアクションメソッドが "HTMLPage.html"という名前のコントローラを実際に持っている場合にのみ一致します。 – Guffa
説得力がありますが、それでも動作しません。 RegisterRoutes関数の先頭に追加したのは次のとおりです: 'routes.MapRoute( " ExactMatch "、 " Content/HTMLPage.html "、 new {controller =" Home "、action =" About "}); '。それでも私はHTMLページの内容を表示します。 P.S.私はそれがこのように働くべきであることを理解しています(マニュアルはそうすべきだと言います)が、私はそれが私が間違ったことを推測しています。私はVS2012とWindows 7でローカルにテストしています。 –