1

私は、Pro ASP.NET MVC 3 ブックの「ディスク ファイルのルーティング要求」の部分を読んでいて、カスタム ルート制約に関連する少し奇妙な問題に直面しています。

カスタムルートを作成しました:

//82:1. this is added so that below routes are checked first before checking the disk files.
routes.RouteExistingFiles = true;

//82:2 the custom route which maps requests to Static/StaticContent.htm to route /Home/Content, only from IE.
routes.MapRoute("DiskFile", "Content/StaticContent.htm",
    new { controller = "Home", action = "Content" },
    new {customConstraint = new UserAgentConstraint("IE")},
    new[] { "UrlsAndRoutes.Controllers" });

本によると、このルートにより、IE ユーザーは Home/Content ルートを表示し、IE 以外のユーザーは Content/StaticContent.htm を直接表示できるようになります。それは私にとってはうまくいきません。

何が起こっているかは次のとおりです。

  1. アプリケーションを実行して IE で URL を開くと、http://localhost:50483/Content/StaticContent.htm/Home/Content に再ルーティングされます
  2. 次に、Chrome で URL を開くhttp://localhost:50483/Content/StaticContent.htmと、StaticContent.htm の元のコンテンツが表示されています。
  3. 次に、IE に変更してCtrl-R(更新) を押すか、URL バーで URL を選択して押すEnterと、StaticContent.htm の元のコンテンツにルーティングされます (なぜですか? )
  4. を押すCtrl-F5と、/Home/Content に再ルーティングされます ( wut? )

ルートは、Content/StaticContent.htm にアクセスしようとする IE ユーザーを常に /Home/Content に送るはずではないでしょうか?

PS: Visual Studio を再起動し、IE のブラウザー履歴も削除しましたが、問題は解決しません。

UserAgentConstraint.cs
Global.asax.cs の RegisterRoutes メソッド

4

1 に答える 1

1

多分キャッシュされてる

Ctrl+F5 は、コンテンツが変更されていない場合でも、サーバーにリロードを要求します。

これは正しい動作のようです。

最初のリロード後に static.html を変更して確認します。次に Ctrl+R リロード。アクションメソッドにヒットするはずです。

于 2013-04-02T15:43:35.993 に答える