Chỉnh sửa: Vì ASP.NET MVC 4 cách tiếp cận tốt nhất chỉ đơn giản là sử dụng thuộc tính được xây dựng trong AllowAnonymous.
Câu trả lời dưới đây đề cập đến phiên bản trước của ASP.NET MVC
Bạn có thể tạo một thuộc tính cho phép tùy chỉnh kế thừa từ các AuthorizeAttribute tiêu chuẩn với một tham số bool tùy chọn để xác định xem uỷ quyền là cần thiết hay không.
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);
}
}
Sau đó, bạn có thể trang trí điều khiển cơ sở của bạn với thuộc tính:
[OptionalAuthorize]
public class ControllerBase : Controller
{
}
và cho bất kỳ bộ điều khiển mà bạn không muốn cho phép chỉ cần sử dụng ghi đè lên với một 'false' - ví dụ
[OptionalAuthorize(false)]
public class TestController : ControllerBase
{
public ActionResult Index()
{
return View();
}
}
Nguồn
2009-04-14 11:56:23
Tôi đã nghĩ đến điều này, nhưng tôi đã hy vọng cho một giải pháp đơn giản hơn. Tuy nhiên, nếu "họ" không cung cấp thì giải pháp của bạn là giải pháp tốt nhất. –
Tốt hơn nên sử dụng thuộc tính '[AllowAnonymous]'. – Jaider
Chờ ... để bộ điều khiển chỉ ghi nhận thuộc tính của lớp cấp cao nhất của một loại cụ thể? – Triynko