Tôi đang sử dụng một ActionFilterAttribute để thực hiện logic xác thực tùy chỉnh. Thuộc tính sẽ chỉ được sử dụng trên một lớp Controller có chứa logic xác thực của tôi.ActionFilterAttribute - áp dụng cho các hành động của một loại bộ điều khiển cụ thể
Dưới đây là bộ điều khiển của tôi, có nguồn gốc từ lớp điều khiển tùy chỉnh của tôi, và một thuộc tính mẫu:
public class MyController : CustomControllerBase
{
[CustomAuthorize(UserType = UserTypes.Admin)]
public ActionResult DoSomethingSecure()
{
return View();
}
}
Dưới đây là một ví dụ về ActionFilterAttribute tôi:
public class CustomAuthorizeAttribute : ActionFilterAttribute
{
public MyUserTypes UserType { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
myUser user = ((CustomControllerBase)filterContext.Controller).User;
if(!user.isAuthenticated)
{
filterContext.RequestContext.HttpContext.Response.StatusCode = 401;
}
}
}
Các công trình lớn.
Đây là câu hỏi: Tôi có thể yêu cầu sử dụng thuộc tính này trên các hành động trong loại bộ điều khiển tùy chỉnh của tôi không?
Thuộc tính của bạn bị hỏng do không được kế thừa từ AuthroizeAttribute và do đó không được đảm bảo chạy khi tác vụ được lưu trong bộ nhớ cache. Xem http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ để biết các giải pháp hoạt động với bộ nhớ đệm. –
Tại sao kết quả hành động được lưu trong bộ nhớ cache? –
Nó sẽ được lưu trữ bởi vì ai đó đã bảo nó được lưu trữ. Hãy tưởng tượng một người nào đó đặt thuộc tính Cache trên một lớp cha, không nhận thấy thuộc tính bị hỏng trên kiểu con. Đó là một ý tưởng tốt hơn để sử dụng một thuộc tính mà về cơ bản không tương thích với bộ nhớ đệm ASP.NET/MVC. Xem liên kết ở trên để biết các tùy chọn. –