Tôi tuân theo các nguyên tắc từ bài đăng trên blog sau và tôi nhận được hành vi mà tôi mong đợi khi tôi gỡ lỗi Dịch vụ WCF của mình bằng máy chủ web tích hợp của Visual Studio 2010.Tại sao IIS 7 không trả về lỗi JSON? Hoạt động trên máy * my *
http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/
Khi ứng dụng của tôi ném một FaultException(), tôi có thể thấy các đại diện JSON của lỗi đó trên máy tính địa phương của tôi. Ứng dụng này cũng trả về HttpStatusCode thích hợp (trong trường hợp này là 401 trái phép), đó là hành vi mong muốn.
{"Code":"UserNotLoggedInFault","DisplayText":"You must be logged in to access this resource.","InternalText":"User is not logged in"}
Khi tôi triển khai ứng dụng của tôi để IIS 7.0 mặc dù, tôi nhận được HttpStatusCode đúng, nhưng html trở lại là nội dung chung chung mà được kết hợp với mã trạng thái:
Bạn không có quyền để xem thư mục hoặc trang này.
Vì tính năng này hoạt động cục bộ, tôi cho rằng vấn đề là cài đặt cấu hình IIS. Tôi đã loại bỏ các giá trị IIS: Lỗi trang đã chặn trạng thái lỗi (nó được sử dụng để trả lại HTML được định dạng từ% SystemDrive% \ inetpub \ custerr \\ 401.htm)
Có ai biết cài đặt IIS nào tôi cần thay đổi không để cho phép phản hồi JSON chuyển qua khi Trạng thái HTTP nằm ngoài phạm vi 200 được trả về? ... hoặc có lẽ tôi cần phải làm gì khác?
CẬP NHẬT # 1
này chỉ xuất hiện để thể xảy ra khi ứng dụng của tôi ném một FaultException mà cũng đặt HttpStatusCode để trái phép (401). Nếu ứng dụng của tôi trả về mã trạng thái 404 Not Found, thì JSON được trả về đúng.
Câu hỏi vẫn đứng, nhưng tôi cho rằng nó chỉ áp dụng để trả về mã trạng thái không được phép 401.
Dưới đây là một số ảnh chụp màn hình của phản ứng như bắt bởi Charles Web Proxy
Đây là những gì nó trông giống như khi tôi đánh máy địa phương của tôi
CẬP NHẬT # 2
Vì vậy, điều này không không xảy ra nếu tôi từ xa máy tính để bàn vào máy chủ và nhấn trang web thông qua localhost. Khi tôi nhấn URL yêu cầu xác thực, tôi nhận được đối tượng JSON thích hợp trả về.
Vì vậy, không có nghĩa là IIS đối xử với 401 mã trạng thái khác nhau và rằng người dùng không có chứng thực được bảo vệ khỏi những phản ứng thích hợp?
Lưu trữ cục bộ của bạn - IIS hoặc IIS Express là gì? Bạn có thể trở thành phản hồi từ các trang web khác trên máy chủ không? – Regfor
Tại địa phương, tôi đang chạy WebDev.WebServer40.exe. Trên máy chủ Windows Server 2008 IIS 7 của tôi, tôi có thể POST và GET các đối tượng JSON và mọi thứ hoạt động tốt, ngoại trừ khi tôi ném một FaultException. Khi tôi ném nó cục bộ, tôi nhận được cấu trúc JSON. Khi tôi ném nó vào hộp Windows Server/IIS, tôi nhận được thông báo "Bạn không có quyền xem thư mục hoặc trang này". phản ứng. – JackAce
Và còn về các ứng dụng web khác hoặc dịch vụ từ máy chủ. Bạn có thể thực hiện các cuộc gọi HTTP thành công đến một thứ khác từ máy chủ không? – Regfor