Dot-Net
覆蓋 ASP.NET MVC 中的授權屬性
我有一個 MVC 控制器基類,我在其上應用了 Authorize 屬性,因為我希望幾乎所有的控制器(以及它們的動作)都被授權。
但是,我需要一個控制器和另一個未經授權的控制器的操作。我希望能夠用
[Authorize(false)]或其他東西來裝飾它們,但這不可用。有任何想法嗎?
似乎 ASP.NET MVC 4 通過添加AllowAnonymous屬性“修復”了這個問題。
[Authorize] public class AccountController : Controller { [AllowAnonymous] public ActionResult Login() { // ... } // ... }
編輯:由於 ASP.NET MVC 4,最好的方法就是使用內置的AllowAnonymous屬性。
下面的答案是指早期版本的 ASP.NET MVC
您可以使用可選的 bool 參數創建從標準 AuthorizeAttribute 繼承的自定義授權屬性,以指定是否需要授權。
public class OptionalAuthorizeAttribute : AuthorizeAttribute { private readonly bool _authorize; public OptionalAuthorizeAttribute() { _authorize = true; } public OptionalAuthorizeAttribute(bool authorize) { _authorize = authorize; } protected override bool AuthorizeCore(HttpContextBase httpContext) { if(!_authorize) return true; return base.AuthorizeCore(httpContext); } }然後您可以使用該屬性裝飾您的基本控制器:
[OptionalAuthorize] public class ControllerBase : Controller { }對於任何不需要授權的控制器,只需使用帶有“假”的覆蓋 - 例如
[OptionalAuthorize(false)] public class TestController : ControllerBase { public ActionResult Index() { return View(); } }