Авторизация с ролями :
Вы можете преобразовать роли в константы и использовать их следующим образом:
public class StaticRoles
{
public const string A = "A";
public const string B = "B";
public const string C = "C";
public const string ABC = "A, B, C";
}
Используйте эти константы следующим образом:
[Authorize(Roles = StaticRoles.ABC)]
[Route("foo")]
public IActionResult Foo()
Использование маршрутов в представлениях :
При создании ссылок вы можете использовать помощники тегов для ссылок, которые автоматически читают атрибут Route из метода контроллера:
<a asp-controller="@nameof(HomeController).Replace("Controller", string.Empty)" asp-action="@nameof(HomeController.Foo)">Foo</a>
Вам следует Реорганизовать .Replace("Controller", string.Empty)
в метод расширения String для уменьшения размазывания кода.
Использование маршрутов в коде :
Если вы хотите использовать те же функции, что и помощники тегов в коде, вы можно использовать класс LinkGenerator , который автоматически вводится
Использовать внедрение зависимостей, чтобы получить ссылку на LinkGenerator
public class HomeController : Controller
{
private readonly LinkGenerator linkGenerator;
public HomeController(LinkGenerator linkGenerator)
{
this.linkGenerator = linkGenerator;
}
// ..
}
Внутри HomeController
, вы можете затем использование
linkGenerator.GetPathByAction(
nameof(HomeController.Index),
nameof(HomeController).Replace("Controller", string.Empty))
};
GetPathByAction
имеет третий параметр, когда у маршрута есть параметры в составе URL:
linkGenerator.GetPathByAction(
nameof(HomeController.Index),
nameof(HomeController).Replace("Controller", string.Empty),
values: new { version = user.Version})
};