Vấn đề này đã khiến tôi băn khoăn trong vài ngày nay, vì vậy khi tìm ra câu trả lời phù hợp với câu trả lời của tvanfosson ở trên, tôi nghĩ sẽ đáng để nhấn mạnh phần cốt lõi của câu trả lời và giải quyết một số câu trả lời có liên quan.
Câu trả lời cốt lõi là đây, ngọt ngào và đơn giản:
filterContext.Result = new HttpUnauthorizedResult();
Trong trường hợp của tôi, tôi kế thừa từ một bộ điều khiển cơ sở, vì vậy trong mỗi bộ điều khiển kế thừa từ nó, tôi ghi đè OnAuthorize:
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
YourAuth(filterContext);
}
Vấn đề là trong 'YourAuth', tôi đã thử hai thứ mà tôi nghĩ không chỉ hoạt động mà còn chấm dứt yêu cầu ngay lập tức. Chà, đó không phải là cách nó hoạt động. Vì vậy, đầu tiên, hai điều KHÔNG hoạt động, ngoài mong đợi:
filterContext.RequestContext.HttpContext.Response.Redirect("/Login");
FormsAuthentication.RedirectToLoginPage();
Những điều đó không chỉ không hoạt động mà còn không kết thúc yêu cầu. Có nghĩa là sau:
if (!success) {
filterContext.Result = new HttpUnauthorizedResult();
}
DoMoreStuffNowThatYouThinkYourAuthorized();
Chà, ngay cả với câu trả lời đúng ở trên, dòng logic vẫn tiếp tục! Bạn vẫn sẽ nhấn DoMoreStuff ... trong OnAuthorize. Vì vậy, hãy ghi nhớ điều đó (DoMore ... nên ở trong một cái khác).
Nhưng với câu trả lời chính xác, trong khi luồng logic OnAuthorize vẫn tiếp tục cho đến cuối cùng, sau đó bạn thực sự nhận được những gì bạn mong đợi: chuyển hướng đến trang đăng nhập của bạn (nếu bạn có một bộ trong Forms auth trong webconfig của mình).
Nhưng thật bất ngờ, 1) Response.Redirect ("/ Login") không hoạt động: phương thức Hành động vẫn được gọi và 2) FormsAuthentication.RedirectToLoginPage (); làm điều tương tự: phương thức Hành động vẫn được gọi!
Điều này dường như hoàn toàn sai đối với tôi, đặc biệt là với cái sau: ai có thể nghĩ rằng FormsAuthentication.RedirectToLoginPage không kết thúc yêu cầu hoặc làm tương đương ở trên những gì filterContext.Result = new HttpUnauthorizedResult () không?