問題タブ [attributerouting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc - ASP.NET MVC 5.1 属性ルーティング (マルチテナント mvc アプリ) にドメイン パラメーターを追加するためにオーバーロードするクラス
私は基本的に、複数のドメインに異なるアプリを応答する 1 つの MVC プロジェクトを持っています: - http://www.mydomain1.com - http://www.mydomain2.com など
宣言レベルでドメイン名を処理するように MVC 5.1 属性ルーティングを拡張することを検討しているので、クラス コントローラーに次のように記述できます。
[RoutePrefix(ドメイン = "www.mydomain1.com"、プレフィックス = "アカウント")]
asp.net - POST 送信の追加のルート パラメーターを削除する
次のような新しい MVC5 RouteAttribute を使用したルート定義があります。
これにより、ユーザーが新しいパスワードと確認パスワードを入力できるフォームを含むビューが読み込まれ、パスワードのリセット トークンとユーザー ID の値が非表示フィールドとして送信されます。ビューは次のような URL でアクセスされます -
ビューコードで-
定義済みの Action と Controller を提供したので、URL が表示されることを期待していました -
/アカウント/リセットパスワード/
フォームアクション用。これの代わりに私が見ているのは-
/アカウント/リセットパスワード/2/0tLb2N1eVc3a2dHMkxqNVlX.....
POST コントローラーのアクション定義は次のようになります。
追加のルート引数が原因で、POST 要求が 404 で失敗します。
BeginForm メソッドのルート値パラメーターとして "null" を指定するか、具体的には "user" と "token" を空の文字列に設定しようとしましたが、いずれの場合も元の GET パラメーターが保持されます。私が見つけた唯一の回避策は、POST アクションの名前を完全に変更することです。この場合、期待どおりにレンダリングされます。
POST アクションに同じアクション名を付けたまま、BeginForm メソッドに必要のない余分なパラメーターを追加させない方法はありますか? 必要に応じてこれをフォーム要素として明示的に書き出す準備ができていますが、組み込みメソッドを使用してこれを達成する方法はありますか? 他に何もない場合でも、一貫性のために。
c# - 属性ルーティングを使用する場合、Mvc 5 コントローラーの ActionDescriptor を取得するにはどうすればよいですか?
Attribute Routingを使用するコントローラーのアクションのActionDescriptorを取得しようとしていますが、常に null です。
私の調査から、クラスActionMethodSelectorBaseには、指定したコントローラー内のすべてのメソッドを分割するPopulateLookupTablesというメソッドがあることがわかりました。メソッド内では、MethodInfo のリストを 2 セットのリストにフィルタリングします。
- AliasedMethods - ActionNameSelectorAttribute で装飾された直接ルートのないすべてのアクション メソッド。
- NonAliasedMethods - ActionNameSelectorAttribute で装飾されていない直接ルートのないすべてのアクション メソッド。
注: コントローラー レベルで直接ルート (RouteAttribute) が設定されている場合、AliasedMethods と NonAliasedMethods は空になります。
注: 直接ルートは、コントローラー (コンストラクターとイベントを除く) 内にあるメソッドとして定義され、IRouteInfoProvider または IDirectRouteFactory のいずれかから継承する属性で装飾されます (RouteAttribute はこれらの両方から継承します)。
と
- DirectRouteMethods - 何らかの形式の IRouteInfoProvider を直接装飾するメソッド。
- StandardRouteMethods - IRouteInfoProvider が直接装飾されていないメソッド。(RouteAttribute を持つコントローラのアクション メソッドを含みますが、メソッドには RouteAttribute はありません)。
ReflectedControllerDescriptor.FindActionが呼び出されると、内部的にActionMethodSelectorBase.FindActionMethodsが呼び出され、AliasedMethodsとNonAliasedMethods (直接ルートを持つすべてのアクションが除外されます) のみが参照されます。
ReflectedControllerDescriptor.GetCanonicalActionsが呼び出されると、内部的にReflectedControllerDescriptor.GetAllActionMethodsFromSelectorが呼び出されます。これはAliasedMethodsとNonAliasedMethods (直接ルートを持つすべてのアクションを除外します) のみを調べます。
私が見る限り、DirectRouteMethodsはRouteCollection.MapMvcAttributeRoutes 拡張メソッドの 1 か所でのみ使用されます。これは、RouteTable.RoutesコレクションにアクションへのRouteCollectionRouteがあることを意味しますが、そこに到達する方法がわかりません。
RouteAttributeを持つアクションのActionDescriptorを取得する方法を知っている人はいますか
c# - MVC5 属性ルーティングによるあいまいなルート
属性ルーティングを使用すると、あいまいなルートの問題が発生します。問題は、ルートのルートで変数パラメーターを使用することから生じます (私は信じています)。私を悩ませているのは、リテラルパラメーターが優先されていないようで、MVC5 が使用するルートを決定できないことです。
以前に他のルートでこれに出くわしたことがあり、コンベンションルートを定義することで修正できたと思いました. それを念頭に置いて、属性ルーティングのベスト プラクティスとあいまいさの解決に関する詳細情報はどこで見つけることができますか?
これが私が問題を抱えているコードと例外です。
「/」アプリケーションでサーバー エラーが発生しました。
URL に一致する複数のコントローラ タイプが見つかりました。これは、複数のコントローラーの属性ルートが要求された URL と一致する場合に発生する可能性があります。
要求は、次の一致するコントローラー タイプを検出しました:
アカウントコントローラー
ラウンドコントローラー
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.InvalidOperationException: URL に一致する複数のコントローラーの種類が見つかりました。これは、複数のコントローラーの属性ルートが要求された URL と一致する場合に発生する可能性があります。
要求は、次の一致するコントローラー タイプを検出しました:
アカウントコントローラー
ラウンドコントローラー
RouteConfig.cs
RoundController.cs
AccountController.cs
asp.net-mvc - パラメータ名に基づいてグローバル ルート制約を追加する
ライブラリAttributeRoutingを使用して、パラメーター name に基づくデフォルトのルート制約を使用するように属性ルーティングを構成できました。
たとえば、 year で終わるすべてのルート パラメーターに RegexRouteConstraint を追加するには、次のようにします。
私は MVC5 のカスタム ルート制約について知っていますが、単にパラメーター名に基づいて、規則によっていくつかの制約を追加できるようにしたいと考えています。
MVC5.1 の属性ルーティング機能で同じことを行うことは可能ですか?
asp.net-mvc - MVC5 属性ルート、オプションのパラメータなしでルートに null を発行
私はコントローラーに持っています:
[ルートプレフィックス("")]
ルートを使用したアクション:
これらの URL をブラウザに入力すると、これが機能します。
ローカルホスト/やるべきこと ローカルホスト/
やるべきこと/何か
ローカルホスト/やるべきこと/何か/何か
しかし、これらはすべて null を返します。
これらは正しい URL を返します。
Url.Action("ThingsToDo", "ControllerName", new { filter1 = "something", filter2 = "something" })
Url.Action(MVC.ControllerName.ThingsToDo("something", "something"))
オプションのパラメーターが必要ない場合に、URL を正しく生成する方法についてのヘルプをいただければ幸いです。
c# - ASP.NET Web API のオプション パラメーターを使用した属性ルーティング
Web API 2 属性ルーティングを使用してカスタム API を設定しようとしています。関数が呼び出されるようにルートが機能していますが、何らかの理由で、すべてが正しく機能するために最初のパラメーターを渡す必要があります。サポートしたい URL は次のとおりです。
最後の 3 つの URL は機能しますが、最初の URL には「要求に一致するコントローラー 'コントローラー名' でアクションが見つかりませんでした」と表示されます。
私のコントローラーは次のようになります。
asp.net-mvc - RouteCollectionRoute で正しいルートを見つける方法は?
ASP MVC ルートをテストしています。ASP MVC 5.1 の属性ルートに問題があります
次のようなコントローラーがある場合:
次に、特定のリクエストに一致するルートをテストするために、 を呼び出しますroutes.GetRouteData
。System.Web.Routing.RouteData
ルートと、一致するコントローラーとアクションを示す値を含むを取得します。
問題は、このルートがRouteCollectionRouteのインスタンスになり
、この内部クラスがこれら 2 つのアクションへのルート グループのラッパーになっていることです。コントローラは にありますRouteData.values
が、アクションはありません。これらの含まれているルートは で取得できますrouteData.Values["MS_DirectRouteMatches"] as IList<RouteData>
。
上記の例では、2 つのアクション メソッドに対して、リストに 2 つのルートがあります。一致したルートのアクション メソッド名を読み取ることができるように、含まれているルートのどれが実際に一致するかを知る必要があります。このルートを解決するにはどうすればよいですか?
まったくないというデザインの選択に少し困惑していRouteCollectionRoute
ます。ルーティング時には、ルート コレクションがあり、次に を呼び出して URL のルートを解決しますGetRouteData
。これでルートは 1 つになりました。しかし、そうであれば、それRouteCollectionRoute
はまだルートのコレクションであり、ルートの解決はまだ終わっていません。RouteCollectionRoute を持つことで何が得られますか? ルート解決は 2 段階のプロセスになりましたか? それとも再帰的なプロセスですか?
ASP MVC の内部を調べていることはわかっていますが、この種のテスト容易性を念頭に置いて設計されていないため、これが唯一の方法です。いくつかの内部クラスやメソッドを公開するなどの単純なことでさえ、大いに役立ちました!