Примените атрибут [Авторизовать] неявно ко всем контроллерам Web API
Мое приложение настроено так, что все запросы, кроме имени пользователя, должны быть "разрешены" с использованием атрибута авторизации в веб-интерфейсе. Например.
[Authorize]
[HttpGet, Route("api/account/profile")]
public ApplicationUser Profile()
{
return userModel;
}
и только авторизация не должна разрешаться, так как там, где вы получаете токен;)
[AllowAnonymous]
[HttpPost, Route("api/account/login")]
public async Task<IHttpActionResult> Login(LoginViewModel model)
{
....
}
вместо того, чтобы добавить атрибут [Authorize]
ко всем моим маршрутам, есть ли способ установить его глобально?
Ответы
Ответ 1
У вас есть две опции
-
Уровень контроллера, украсив ваш контроллер атрибутом authorize.
[Authorize]
[RoutePrefix("api/account")]
public class AccountController : ApiController
{
-
Вы также можете установить глобальный уровень для всех маршрутов, в Register
методе файла WebApiConfig.cs
config.Filters.Add(new AuthorizeAttribute());
Ответ 2
Вы можете установить AuthorizeAttribute
в файл WebApiConfig
, как показано ниже:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Filters.Add(new AuthorizeAttribute());
}
Теперь все методы от ваших контроллеров Web Api потребуют авторизации. Если вы хотите удалить это требование авторизации для метода, вам нужно добавить атрибут [AllowAnonymous]
, как в методе действия входа.
Ответ 3
Я просто хотел добавить что-то к другим ответам, если вы используете
filters.Add(container.Resolve<AuthorizeAttribute>());
тогда вы также можете вставлять все зависимости в свой атрибут, если есть необходимость