2

ルーティングに何か奇妙なことが見つかりました...

Visual Studio WebExpress2012でMVC3アプリケーションをテストしています

  • 問題を切り分けるために新しいMVC3アプリケーションを作成しました
  • デフォルトルートの前に次のルートを追加しました。

        routes.MapRoute(
            "default_localization",
            "{language}/{country}/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    
  • 次に、他に変更を加えることなく(プロジェクト作成後の初期ファイルだけの領域はありません)、アプリケーションを実行しましたが、一見するとすべてが正常に機能していました。これは新しいアプリケーションであるため、ページの上部に2つのリンクがあります。

アクションリンクは次のようになります。

<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>

次に、これが起こっていることです:

  • ブラウザのURLが次の場合:http://localhost:54870/

    • ホームリンクは次のとおりです。http://localhost:54870/
    • Aboutリンクは次のとおりです。http://localhost:54870/Home/About

    HTML

    <li><a href="/">Home</a></li>
    <li><a href="/Home/About">About</a></li>
    

    どちらでも大丈夫

  • ただし、[バージョン情報]リンクをクリックすると、ブラウザのURLは次のようになります。http://localhost:54870/Home/About

    • ホームリンクは次のようになります。http://localhost:54870/Home/About
    • アバウトリンクは次のようになります。http://localhost:54870/Home/About/Home/About

    リンクが混乱している場合でも、正しいアクションを実行します。

    HTML

    <li><a href="/Home/About">Home</a></li>
    <li><a href="/Home/About/Home/About">About</a></li>
    

カスタムルーティングを削除すると、すべてが期待どおりに機能します

  • なぜこうなった?

  • どうすれば修正できますか?

4

2 に答える 2

2

私はちょうど問題を見つけました

基本的に、いくつかのルーティング記事を読み、最終的に理解しました。私の問題は、[About] リンクをクリックした後、常にカスタム ルートが選択されることでした。

なんで?

考えてみましょう:

私の URLhttp://localhost:54870/

しかし、URL がhttp://localhost:54870/Home/Aboutカスタム ルートである場合、ルート エンジンは Home/About が {language} および {country} セグメントであると想定し、{controller} および {action} のデフォルト値を持っているため、ルートは単純にマッチ

さて、私は教訓を学び、ルーティングについてさらに学びました。将来的には、ルートを定義する際に KISS の原則に従う予定です

于 2012-08-22T08:38:25.637 に答える
0

ルートを次のように置き換えてみてください。

routes.MapRoute(
    "default_localization",
    "{language}/{country}/{controller}/{action}/{id}",
    new { language = "en", country = "US", controller = "Home", action = "Index", id = UrlParameter.Optional }
);

それが機能するかどうかを確認してください。

これがお役に立てば幸いです。

于 2012-08-22T00:43:15.427 に答える