Подтвердить что ты не робот

Примените атрибут [Авторизовать] неявно ко всем контроллерам 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] ко всем моим маршрутам, есть ли способ установить его глобально?

4b9b3361

Ответ 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>());

тогда вы также можете вставлять все зависимости в свой атрибут, если есть необходимость