2009-01-29 43 views
10

Tôi đang cố gắng để hiểu làm thế nào xử lý lỗi hoạt động khi sử dụng Authorize [Duyệt] Filter Action trong MVC Preview 4.ASP.Net MVC Authorization lọc hành động

Tôi có một hành động mà trông như thế này:

[Authorize(Roles = "DOMAIN\\NOTAUTHORISED_ROLE")] 
[HandleError] 
public ActionResult NeedAuthorisation() 
{ 
    throw new NotImplementedException(); 
} 

Khi tôi truy cập url: http://localhost:2197/testAuthorisation/NeedAuthorisation, tôi nhận được một trang trống trong trình duyệt của mình. Trong Firebug tôi có thể thấy rằng yêu cầu đã được thực hiện và trạng thái phản hồi của 401 - Unauthorised đã được trả lại. Nhưng tôi không được chuyển hướng hoặc có một customError trả về. Mọi thứ hoạt động như mong đợi khi sử dụng một vai trò mà tôi được ủy quyền.

Điều này đang sử dụng xác thực Windows. Tôi đang ở giữa viết một số mã để thử xác thực Mẫu để xem liệu tôi có gặp vấn đề tương tự hay không. Tôi có <customerrors mode="On"/> đặt và đã tạo các trang lỗi, cả trong thư mục testAuthorisation và thư mục Được chia sẻ.

Trả lời

11

tôi cuối cùng đã tìm thấy this MVC tutorial mà giải quyết vấn đề của tôi:

Chính xác những gì sẽ xảy ra khi bạn cố gắng để gọi một hành động điều khiển mà không bị đủ quyền hạn phụ thuộc vào loại xác thực được kích hoạt. Theo mặc định, khi sử dụng Máy chủ Phát triển ASP.NET , bạn chỉ cần tải một trang trống. Trang được phân phối với trạng thái 401 Không Phản hồi HTTP được ủy quyền.

0

Nếu bạn đã đặt CustomErrors thành Tắt hoặc RemoteOnly thì bạn sẽ không được chuyển hướng đến trang được chỉ định bởi HandleError (mặc định là Error.aspx). Đặt nó thành "Bật" và sau đó xem điều gì xảy ra. Bất kỳ trang lỗi tùy chỉnh bạn chỉ định một cách rõ ràng sẽ chiếm ưu thế, tuy nhiên, vì vậy bạn cần phải loại bỏ những, và có chỉ:

<customErrors mode="On" />

+0

Xin cảm ơn, nhưng tôi đã đặt customErrors. Nó không hỗ trợ – Lewis

0

Bạn cần một cái nhìn lỗi trong thư mục xem tương ứng, nghĩa là bạn cần tập tin Views/TestAuthorization/Error.aspx để có bất cứ thứ gì xuất hiện.

Bạn cũng có thể customize this hành vi theo chế độ xem bạn muốn sử dụng và ngoại lệ bạn muốn kích hoạt nó.

[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]] 
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]] 
+0

Cảm ơn, nhưng tôi đã có chế độ xem lỗi và tôi có chế độ xem lỗi trong thư mục Được chia sẻ. Cả hai đều làm việc như tôi mong đợi (khi tôi ném một NotImplementedException từ phương thức đó chẳng hạn). – Lewis

Các vấn đề liên quan