我意识到我可以用[授权]装饰每个控制器。
但是有没有办法让我可以全局执行此操作以使其成为默认值,然后将Account控制器设置为匿名?
答案 0 :(得分:4)
创建一个所有其他控制器继承的BaseController。然后让这个类继承自Controller,就像这样
SomeController : BaseController
然后在BaseController中
BaseController : Controller
将authorize属性添加到基本控制器。从BaseController继承的所有控制器现在都需要授权。控制器,不,不。因此,您的帐户控制器将仅从Controller继承,而不是BaseController,因为您不希望此授权。
拥有基本控制器还有其他优点。例如,您可以覆盖执行的OnAction以记录应用程序使用情况。
我会创建一个名为BaseUnsecuredController的第二个基本控制器,您的帐户控制器可以从该控制器继承该控制器没有授权的attrubute。然后有一个抽象的基本控制器类,它包含你希望在基本控制器之间共享的常见操作的实现,比如日志记录和错误处理。
希望这有帮助。
答案 1 :(得分:2)
使用每个控制器继承的basecontroller。然后在基本控制器上设置[Authorize]
属性。
答案 2 :(得分:1)
像这样全局应用过滤器。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Existing code
config.Filters.Add(new System.Web.Http.AuthorizeAttribute());
}
}
然后,在AccountController或特定操作方法上应用[AllowAnonymous]
。
[AllowAnonymous]
public class AccountController : WebApiController {}
答案 3 :(得分:0)
您可以通过更改FilterConfig全局添加AuthorizeAttribute,将其添加到所有请求中:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//Other filters
filters.Add(new AuthorizeAttribute());
}
之后,您可以将[OverrideAuthorization]属性添加到控制器。
如果您在全球范围内设置了任何AuthenticationFilter,则无法重置。如果要重置两者,还需要使用[OverrideAuthentication]属性。