我的应用程序已设置,其中除登录之外的所有请求必须使用Web API中的授权属性进行“授权”。 E.g。
[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]
属性添加到我的所有路由中,有没有办法全局设置它?
答案 0 :(得分:46)
您有两个选择
通过使用authorize属性修饰控制器来控制器级别。
[Authorize]
[RoutePrefix("api/account")]
public class AccountController : ApiController
{
您还可以在WebApiConfig.cs文件的Register
方法中将其全局级别设置为所有路径
config.Filters.Add(new AuthorizeAttribute());
答案 1 :(得分:21)
您可以将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]
。
答案 2 :(得分:1)
我只想在其他答案中添加一些内容,如果您使用
filters.Add(container.Resolve<AuthorizeAttribute>());
然后,如果有需要,您还可以将所有依赖项注入属性
答案 3 :(得分:1)
在ASP.NET Core Web API中,就像这样:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers(o =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
o.Filters.Add(new AuthorizeFilter(policy));
});
}