7

Nếu người dùng chưa đăng nhập và họ yêu cầu một hành động được đánh dấu [Authorize], thì phản hồi là chuyển hướng đến hành động Tài khoản/Đăng nhập (mã trạng thái 302 Đã tìm thấy).Có cách nào để làm cho AuthorizeAttribute đáp ứng với mã trạng thái 403 Bị cấm thay vì chuyển hướng không?

Có cách nào để trả lời là mã trạng thái 403 Bị cấm thay thế không?

+0

Đây có phải là giao diện REST không? –

+0

@ Chris: Không, nhưng ngoài sự tò mò tại sao bạn hỏi? Tôi đã viết một hành động HttpPost mà tôi chỉ đơn giản muốn cấm yêu cầu nếu người dùng không đăng nhập thay vì chuyển hướng đến hành động LogOn. –

+4

FYI - [Ủy quyền] * không * gửi lại 403 Cấm. FormsAuthenticationModule bẫy 403 câu trả lời và biến chúng thành chuyển hướng đến trang đăng nhập. Nếu bạn không sử dụng xác thực biểu mẫu, bạn có thể muốn thay đổi phần của Web.config để phản ánh điều này để FormsAuthenticationModule không chạy logic này. – Levi

Trả lời

10

Tạo bộ lọc hành động kế thừa từ AuthorizeAttribute. Sau đó ghi đè phương thức này:

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
{ 
    Response.StatusCode = 403; 
    Response.Status = "Forbidden"; 
    Response.StatusDescription = "Forbidden"; 
    Response.End(); 
    Response.Close(); 

} 
1

Nếu người dùng chưa đăng nhập thì mã trạng thái thích hợp là 401: Không được phép. Đây là những gì AuthorizeAttribute trả về theo mặc định.

FormsAuthenticationModule sẽ nhận mã trả lại này và chuyển đổi mã đó thành chuyển hướng. Nếu bạn có thể vô hiệu hóa (hoặc thậm chí không tải nó) thì điều này sẽ được trả lại cho người gọi.