2017-05-26 7 views
0

MVC領域を使用してMVCアプリケーションを作成しています。現在、表示エリアには次のルートを使用しています。MVCルートで処理できるパラメータの数に制限はありますか?

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Display_default", 
     "Display/{controller}/{action}/{id}/{id2}/{id3}/{*id4}", 
     new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional } 
    ); 
} 

これは機能します。我々は我々が述べidはちょうど第四idパラメータに連結された後のURLに、しかし、任意のパラメータを、この私たちの現在の設定を追加することができます発見

public ActionResult _MyMethod(string id, string id2, string id3, string id4, string id5, string id6) 

:しかし、私たちは、6つのパラメータを持つコントローラのアクションの必要性を発見しました。もはや、このルートに負荷をページを使用して、しかし

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Display_default", 
     "Display/{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}", 
     new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional } 
    ); 
} 

は、我々はそうのように必要なパラメータの数を受け入れるようにルートを拡張しようとしましたありません。

MVCルーティングにはマップ可能なパラメータの量に関するCAPがありますか?また、マップされたパラメータの数をid、id2、id3に縮小すると、すべてのオーバーフローがid3に連結されて再び動作することも発見しました。

誰でもこれに関する情報はありますか?

+0

オプションのパラメータのすべてを作るよう

(クエリ文字列の制限を超えると、例外をスローう点まで) 。しかし、最後のパラメータだけが 'UrlParameter.Optional'としてマークされることがあります –

+0

私の場合、なぜ私は必要な6つのパラメータを許可しないのでしょうか? –

+0

'UrlParameter.Optional'をすべて削除しましたか?そしてなぜあなたは '{* id6}'で6番目のマークを付けましたか? –

答えて

1

ASP.NET MCVにはパラメータの数に制限はありません。あなたのケースでは

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Display_default", 
     "Display/{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}", 
     new { action = "Index", id = UrlParameter.Optional , id2 = UrlParameter.Optional, id3 = UrlParameter.Optional } 
    ); 
} 

変数IDID4が必須ですが、オプションです。オプションのパラメータを最後に追加する必要があります。

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

それともあなたは好きなだけを持つことができ

routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}/{id2}/{id3}/{id4}/{id5}/{*id6}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, id2 = UrlParameter.Optional, id3 = UrlParameter.Optional, id4 = UrlParameter.Optional, id5 = UrlParameter.Optional } 
); 
+0

最後のパラメータだけが 'UrlParameter.Optional'としてマークされます –

+0

@Stephen Mueckeなぜそう思うのですか?これらのコードはうまく動作します。ドキュメントはありますか?私は 'routes.MapRoute'コールスタックを調べました。' ParsedRoute.Matched'メソッドで終了しました。http://www.dotnetframework.org/default.aspx/[email protected]/[email protected]/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/fx/src/xsp/System/Web/Routing/ParsedRoute @ cs/1305376/ParsedRoute @ cs行518では、 'UrlParameter.Optional'としてマークされるパラメータが1つしかないという証拠はありません。 –

+0

これらをすべて指定しないと、ルーティングエンジンはどのルートかを知る方法がなく、ルート値ではなくクエリ文字列を使用します(ルート定義を無意味にします)。 –

関連する問題