0

ASP.NET MVC ルーティングで奇妙な動作を見つけました。

RouteConfig ファイルで、次のようなルート (デフォルト ルート) をマップすると、次のようになります。

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new {
                controller = "Home",
                action = "Index",
                id = UrlParameter.Optional
            }
        );

使用:

@Html.ActionLink("Index", "Home")

次のような、きれいで短い URL を取得します。http://mysite/

しかし、次idのように、の後に別のオプションのパラメーターを追加すると:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}/{name}",
            defaults: new {
                controller = "Home",
                action = "Index",
                id = UrlParameter.Optional,
                name = UrlParameter.Optional
            }
        );

同じActionLink出力この URL:http://mysite/home/index毎回。を使用して同じ動作を確認しましたRedirectToAction

私の質問は次のとおりです。これを回避して、後者の場合に短い URL を取得する方法はありますか? これらの場合、ASP.NET MVC ルーティング エンジンの動作が異なるのはなぜですか?

編集

Dave A が投稿した指示に従って、この問題を回避することができました。カスタム URL パターンに一致する「デフォルト」ルートの前にカスタム ルートを追加しました。

routes.MapRoute(
    name: "Custom",
    url: "{controller}/{action}/{id}/{name}",
    defaults: new {
        controller = "Home",
        action = "Index",
        id = UrlParameter.Optional
    }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new {
        controller = "Home",
        action = "Index",
        id = UrlParameter.Optional
    }
);
4

1 に答える 1

3

MVC フレームワークがルートを処理する方法には、実際に「バグ」または非効率性があります。この場合、特に、すべてのパラメーターを最大限に活用しようとしていますが、混乱しています。

システムでより多くの「グリッチ」を示すハッキングによるこの投稿を読んでください http://weblogs.asp.net/imranbaloch/archive/2010/12/26/routing-issue-in-asp-net-mvc-3-rc- 2.aspx

于 2013-03-13T03:12:36.103 に答える