MVCルーティング-パラメーター名の質問
-
19-08-2019 - |
質問
MVCでC#を使用したルーティングに関する情報を探しています。現在、MVCのルーティングの基本を非常によく知っていますが、探しているものを見つけるのはやや困難です。
効果的に、私が見つけたいのは、単一のパラメータを取る単一のルートを定義する方法です。
私がオンラインで見つけた一般的な例は、すべてこの例に基づいています
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}"
new { controller = "Default", action="Index", id=""});
このルートをマッピングすることにより、任意のコントローラーの任意のアクションにマッピングできますが、アクションに何かを渡す場合は、メソッドパラメーターを<!> quot; id <!> quot;と呼ぶ必要があります。可能であれば、これを回避する方法を見つけたいので、アクションで別のパラメーター名を使用するために常にルートを指定する必要はありません。
アイデアはありますか、またはこれを回避する方法を見つけましたか?
解決
好きなようにルートを構築できます
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{param1}/{param2}/{param3}"
new { controller = "Default", action="Index", param1="", param2="", param3=""});
また、この投稿を見る、コメントセクションにすべての種類のサンプルが含まれています
他のヒント
異なるパラメーター名を使用し、同じルーティング変数を保持する 場合は、FromUri属性を次のように使用します。
public ActionResult MyView([FromUri(Name = "id")] string parameterThatMapsToId)
{
// do stuff
}
ルートで必要なものは次のとおりです。
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}"
new { controller = "Default", action="Index", id=""});
あなたが求めていることを正確に行えるとは思いません。 MVCがアクションを呼び出すと、ルート、リクエストパラメーター、クエリ文字列でパラメーターを探します。常にパラメーター名と一致するように探しています。
おそらく、古き良きクエリ文字列があなたのニーズを満たすでしょう。
~/mycontroller/myaction/?foobar=123
このアクションに123を渡します:
public ActionResult MyAction(int? foobar)
これは何世紀も前のことですが、それがまだ誰かに役立つことを願っています。前に同じ質問をしました。これがあなたが探しているものだと思います。私の質問投稿から引用された回答:
<!> quot; {* pathInfo}ビットはスラッグと呼ばれます。これは基本的に<!> quot;このポイント以降のすべてがpathInfo <!> quot;というパラメーターに詰め込まれているというワイルドカードです。したがって、<!> quot; {resource} .axd / {* pathInfo} <!> quot;次のようなURL:http://blah/foo.axd/foo/bar/baz/bing
その後、2つのパラメーターが作成されます。1つはfooを含むリソース、もう1つはfoo / bar / baz / bing。<!> quotを含むpathInfoと呼ばれます。
引き続きFromUri
属性を使用することはできませんが、次のようにRoute
属性を使用できます
[Route("~/Policy/PriorAddressDelete/{sequence}")]
public ActionResult PriorAddressDelete(int sequence)
{
Policy.RemoveScheduledPriorAddressItem(sequence);
return RedirectToAction("Information", new { id = Policy.Id });
}
技術的にはこれにより新しいルートが追加されますが、少なくともrouteconfig
が散らかることはありません。使用する場所によってルート定義を正しく設定します。これは私が好きなことです(ハンティングを減らします)。
属性ルーティングを使用するには、これがrouteconfigファイルにある必要があることを忘れないでください。上記定義済みのルート:
routes.MapMvcAttributeRoutes();