コントローラーで MVC5 の属性ルーティングを使用しています。
質問:
コントローラー間で属性ルーティングの優先順位を制御する方法はありますか?
次のことを考慮してください
[Route("home/{action=index}/{username?}")]
public class HomeController : Controller
{
[Route("home/index/{username?}", Order = 1)]
[Route("home/{username?}", Order = 2)]
[Route("{username?}", Order = 3)]
public ActionResult Index()
{
// ... bunch of stuff
}
}
上記のコードに基づいHomeController.Index()
て、次のリクエストを使用してアクション メソッドを呼び出す必要があります。
- ドメイン/
- ドメイン/{ユーザー名}
- ドメイン/ホーム/
- ドメイン/ホーム/{ユーザー名}
- ドメイン/ホーム/インデックス/
- ドメイン/ホーム/インデックス/{ユーザー名}
2 番目のコントローラー:
[Authorize(Roles = "Member")]
[Route("profile/{action=index}")]
public class ProfileController : Controller
{
[Route("profile")]
public ActionResult Index()
{
}
}
はProfileController.Index()
、次のリクエストを使用して呼び出す必要があります。
- ドメイン/プロフィール
- ドメイン/プロファイル/インデックス
問題
例から、URL を送信domain/profile
すると、あいまいな例外がスローされます。domain/{username}
と の間にあいまいさがあるようですdomain/profile
。
ここで、規則ベースのルーティングを使用した場合、これはうまくいきます (最初の一致が勝ちます)。しかし、MVC5 属性ルーティングでそれを行うことはできますか? サードパーティのライブラリがコントローラー間の優先順位をサポートしていることがわかったため
https://github.com/mccalltd/AttributeRouting/wiki/Controlling-Route-Precedence
routes.MapAttributeRoutes(config =>
{
config.AddRoutesFromController<ProfileController>();
config.AddRoutesFromController<HomeController>();
});