4

コントローラーに次のようなアクションがあります。

public ActionResult Index(string ssn)
{
}

およびデフォルトのルート値:{controller}/{action}/{id}

のような URL を使用したくありません/Home/Index?ssn=1234。のように使いたい/Home/Index/1234。しかし、ssn パラメーター (またはカスタム モデル バインダー) に新しいルート値を追加したくありません。

[ActionName]パラメータのような完全な属性はありますか?

このようなもの:

public ActionResult Index([ParameterBinding("id")] string ssn)
{
}
4

1 に答える 1

1

Darin と Rumi が述べたように、組み込みの属性はありませんがRouteCollection.MapRoute、単一のルートで Constraints パラメータを使用して、単一の新しいルートで同じ効果を (複数のコントローラー/アクションにわたって) 実現できます。

次のルート構成は、「SSN」ルートを Foo または Bar コントローラーに適用し、その他のコントローラーはデフォルト ルートを経由します。

routes.MapRoute(
    name: "SSN",
    url: "{controller}/{action}/{ssn}",
    defaults: new { controller = "Foo", action = "Index" },
    constraints: new { controller = "(Foo|Bar)", action = "Index" }
);
// default route
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

編集: あるいは、最初に要求したものをサポートしていると思われるActionParameterAliasライブラリを使用することもできます。

于 2013-10-03T14:29:17.690 に答える