3

ホームページに行くと

http://localhost:5119/  

にリダイレクトします

http://localhost:5119/Home

(これが私のブラウザの URL バーに表示されるものです。/Home を表示しないようにしたいです)

それが私のデフォルトルートの行き先であることは理解していますが、ブラウザでURL行が書き換えられる原因がわかりません。Visual Studio 2012 の既定の例では、ベース URL に移動すると、この問題は発生しません。ルート デバッグの写真を添付し​​ます (役に立たないようですが、何らかの価値があるかもしれません)。

ありがとう - ピーター

これを後で追加します。ルートコードの関連部分です

        // HOME
        int currentYearInt;
        Int32.TryParse(currentYear, out currentYearInt);
        routes.MapRoute("HomeRouteAll", "Home/{yearInt}",
                  new
                  {
                      /* Your default route */
                      controller = "Home",
                      action = "Index"
                  });



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

ここに画像の説明を入力

4

1 に答える 1

1

Home/{year}パラメータのデフォルト値を持つデフォルト ルートの上のルートが原因で、これが表示され{year}ます。

ルート エンジンは次の決定を行います。

  1. ルートリストの先頭から開始
  2. ルートの値 (controller = "Home"、Action="Index") と一致するものを探します。
  3. 最初の一致で返され、それがあなたの URL です。

一致するコントローラー (ホーム) とアクション (インデックス) とyear パラメーターの既定値があるため、ルート エンジンはルートと一致しHome/{year}、したがって url が得られhttp://domain.com/Homeます。

クイックフィックスは、a) 年にデフォルト値を持たないようにする ( Home/2013)、b) あるものを別のコントローラーに移動する ( NewName/{year})、c) それを別のアクションに移動する ( NewIndex/{year})、または d) デフォルトルートを次のように更新する、のいずれかです。 id の代わりに year パラメータを使用する

routes.MapRoute(
                "Default",
                "{controller}/{year}/{action}",
                new {controller = "Home", action = "Index", year = 2013});

編集

ルート定義の tryParse に関する限り、あなたが何を持っているかはよくわかりませんが、私のテストでは、これはあなたがやりたいことを達成しているように見えました:

routes.MapRoute(
                name: "Test",
                url: "Home/{year}",
                defaults: new { controller = "Home", action = "Index"}, 
//this line causes the year to be an integer
constraints: new { year = @"\d+" }
                );

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

動作:

http://domain.com/ -> Home コントローラーを呼び出し、年パラメーターの値が null の Index アクション (Home/2013 へのリダイレクトなし)

http://domain.com/Home/2010 -> Home Controller を呼び出し、年パラメーターに 2010 を指定した Index アクション

http://domain.com/Home/ -> Home Controller を呼び出し、年の値が null の Index アクション。

2 つのルートの最初のルートでデフォルトの年を定義すると、http://domain.com/Homeに移動すると Home コントローラーが呼び出され、2013 年のインデックス アクションが呼び出され、リダイレクトは発生しません。

最後に、Home/Index アクションは次のようになっていると思います。

public ActionResult Index(int year){...}

Home/Index アクションをヒットしたときに 2013 を自動的に入力したい場合は、int を null 許容パラメーターに変更し、ルートではなくそこで実行します。

public ActionResult Index(int? year){
    if(!year.hasValue){
        year = 2013;
    }

ルートの代わりにここでこのロジックを実行すると、一致する{year}パラメーターがないため、 Home/ へのリダイレクトを防ぐ必要があります。

于 2013-04-19T20:50:13.077 に答える