2013-07-02 28 views
7

Tôi có một ứng dụng MVC4 web với bộ điều khiển sauTại sao AllowAnonymous không hoạt động khi được triển khai lên Azure Websites?

[Authorize] 
public class AccountController : BaseController 
{ 
    [AllowAnonymous] 
    public ActionResult SignInRegister(LoginModel loginModel, string returnUrl) 
    { 
    //some implementation 
    } 
    //other secured actions 
} 

Đây là làm việc như mong đợi khi chạy ở địa phương, nhưng ngay sau khi tôi triển khai nó đến Website miễn phí Azure tôi nhận được một mã số 401 lỗi với thông điệp: You do not have permission to view this directory or page.

Xóa thuộc tính [Authorize] và triển khai lại công việc như mong đợi, thêm lại và triển khai lại sẽ trả về sự cố.

Tôi thậm chí đã thử tên lớp đủ điều kiện: System.Web.Mvc.AuthorizeSystem.Web.Mvc.AllowAnonymous với cùng kết quả.

Ứng dụng đang sử dụng .NET 4.5 và Azure Website cũng được định cấu hình để sử dụng 4.5.

UPDATE: Các BaseController có một hành động mà trả về header xem như một phần trong đó đã không được trang trí với [AllowAnonymous]. Tại địa phương nó dẫn đến trang được hiển thị mà không có tiêu đề, nhưng trên trang web Azure phản ứng đã bị cắt và chỉ trả về với thông báo lỗi được đề cập ở trên. Tôi đã không nhận ra tiêu đề đã mất tích cho đến khi tôi cố ý nhìn vào nó.

Bây giờ câu hỏi đặt ra để được hỏi: tại sao các trang web Azure ghi đè phản hồi?

+2

Bạn nên đăng cập nhật của mình làm câu trả lời. – Kyle

Trả lời

4

BaseController có một hành động trả về Tiêu đề làm dạng xem một phần không được trang trí với [AllowAnonymous]. Tại địa phương nó dẫn đến trang được hiển thị mà không có tiêu đề, nhưng trên trang web Azure phản ứng đã bị cắt và chỉ trả về với thông báo lỗi được đề cập ở trên. Tôi đã không nhận ra tiêu đề đã mất tích cho đến khi tôi cố ý nhìn vào nó.

Bây giờ câu hỏi đặt ra để được hỏi: tại sao các trang web Azure ghi đè phản hồi?

+0

Điều này đã giúp tôi. Nếu bạn sắp bao gồm một phần lượt xem cho bố cục, chúng cần được đánh dấu là [AllowAnonymous]. – Ant

2

Tôi đã gặp sự cố tương tự và giống như cập nhật của Jonas, bạn cần tìm kiếm các Hành động trả lại một phần lượt xem VÀ có thuộc tính [Ủy quyền].

Điều bạn cần làm là xóa thuộc tính [Ủy quyền] và sau đó nếu hành động của bạn cần người dùng được xác thực để hiển thị chính xác, hãy yêu cầu mã của bạn xử lý trường hợp trái phép.

Ví dụ là nếu trang của bạn hiển thị tên người dùng hiện đã đăng nhập qua một phần. Để hành động của bạn hiển thị một chuỗi rỗng hoặc một chuỗi khác nếu người dùng hiện đang đăng nhập không có sẵn.

1

Kiểm tra web.config của bạn nếu bạn có

<authorization> 
    <deny users="?" /> 
</authorization> 

override nó [AllowAnonymous]

Thêm vào phần web.config:

<location path="YourController/AnonymousMethod"> 
    <system.web> 
     <authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 

để cho phép truy cập nặc danh cho AnonymousMethod

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