マイMVC2アプリケーションは、後続のAJAXバックサーバー上の不要なデータアクセスと処理のすべての種類を引き起こす同じアクションに呼び出しを行うコンポーネントを使用します。コンポーネントベンダーは、後続のリクエストを別のアクションにリルートすることを提案します。後続のリクエストは、特定のクエリ文字列を持っている点で異なり、私は自分のルートテーブルのクエリ文字列に制約を付けることができるかどうかを知りたいと思っています。例えばMVC2アプリでクエリ文字列パラメータのルート制約を指定できますか?
、最初の要求はhttp://localhost/document/display/1のようなURLでいます。これはデフォルトルートで処理できます。私は、URLに「ベンダー」を検出することにより、http://localhost/document/display/1?vendorParam1=blah1&script=blah.jsとhttp://localhost/document/display/1?vendorParam2=blah2&script=blah.jsのようなURLを処理するためのカスタムルートを書きたいです。
私は次のことを試してみましたが、それはSystem.ArgumentException: The route URL cannot start with a '/' or '~' character and it cannot contain a '?' character.
をスロー:
routes.MapRoute(
null,
"Document/Display/{id}?{args}",
new { controller = "OtherController", action = "OtherAction" },
new RouteValueDictionary { { "args", "vendor" } });
私は、アカウントにクエリ文字列を取るルートを書くことができますか?そうでない場合は、他のアイデアはありますか?
更新:は、私はhttp://localhost/document/display/1がDocumentController.Display
アクションにルーティングされますが、http://localhost/document/display/1?vendorParam1=blah1&script=blah.jsがVendorController.Display
アクションにルーティングされるように、ルーティング制約を記述することができ、簡単に言えば?最終的には、クエリ文字列に "vendor"が含まれているURLをVendorController.Display
アクションにルーティングするようにしたいと思います。
私は最初のURLがデフォルトルートによって処理することができます理解しますが、何秒でしょうか?これをすべて行うことは可能ですか?試行錯誤の後、答えは「いいえ」と思われます。
ありがとう、Jan.私はこのことを詳しく見ています。フォローアップとして、MVC 3のためにこれを変更しますか? – flipdoubt
いいえ、これはMVC 3でもうまくいくと私は確信しています。これは、Microsoft実装のかなり基本的な概念です。 ASP.NETは実際には実際のファイルにマップされていない10.000.000の異なるURLをASP.NETが好まないため、これを使用します。 –