2010-10-22 35 views
14

Tôi đã viết mã ASP.NET (4.0) để đặt Response.StatusCode thành 400 nếu dữ liệu được đăng lên máy chủ là hợp lệ.
Tôi đặt thông tin hữu ích vào nội dung phản hồi theo định dạng mà yêu cầu chấp nhận tiêu đề yêu cầu. ví dụ: thông báo html cho biết "Trường ngày được yêu cầu ...".Trong IIS7.5 mô-đun nào loại bỏ phần thân của Yêu cầu Xấu 400

Trong IIS7 (7.5.7600) trên Windows 7, tôi nhận được phản hồi html đúng về trình duyệt.

Trong IIS7 (7.5.6000) trên Windows 2008, tôi không lấy lại phần thân html, nhưng chỉ nội dung văn bản có "Yêu cầu không hợp lệ" làm nội dung.

Ai đó có thể chỉ cho tôi cách tôi thay đổi cấu hình của máy chủ 2008 để trả lại thân máy.
Hoặc có sự khác biệt nào giữa các phiên bản IIS này không?
Có thể một mô-đun trong Machine.config?
Ví dụ tôi biết (và phải làm việc xung quanh) rằng mô-đun FormsAuthentication thay đổi 401 thành 302 ngay cả khi bạn không muốn điều này. Có thể có một mô-đun dừng nội dung của 400 được gửi.

TIA.

Trả lời

29

Giải pháp: đã chỉnh sửa phần web.config system.webMáy chủ và đặt thuộc tính httpErrors existingResponse thành "PassThrough" et voilá cố định.
ví dụ:

<system.webServer> 
    ... 
    <httpErrors existingResponse="PassThrough"></httpErrors> 
    ... 
</system.webServer> 

Vâng 2 điều đã cho tôi suy nghĩ về vấn đề này:
1. hành vi customErrors cổ điển bởi vì tôi đã so sánh localhost với một máy chủ từ xa
2. đầu tiên sẽ không giải thích tại sao một số chứng thực 'lỗi' khác của tôi đã nhận được thông qua nguyên vẹn

tôi đào xung quanh và đi qua bài viết này trên IIS7: How to Use HTTP Detailed Errors in IIS 7.0

Nó không hoàn toàn liên quan đến những gì tôi fo und khi chỉnh sửa web.config có thể do tôi sử dụng IIS7.5 nhưng nó đủ để đưa tôi vào vùng lân cận bên phải. Cũng cần lưu ý rằng với IIS 10 bây giờ hỗ trợ HTTP2, StatusDescriptions có chứa văn bản không còn được hỗ trợ khi yêu cầu nâng cấp lên HTTP2 vì vậy nếu bạn phản hồi với 400 (Yêu cầu Xấu), điều này sẽ bị tước đi chỉ với số 400. "HTTP/2 does not define a way to carry the version or reason phrase that is included in an HTTP/1.1 status line."

+0

Thanks a lot, mate :-) Tôi lãng phí một ngày nào đó mà không đúng ** ** Stackoverflowing sự vấn đề. –

8

Nếu thay đổi web.config không phải là một lựa chọn, dưới đây có thể giúp:

Response.TrySkipIisCustomErrors = true; 
+0

Điều này có thể tốt cho ứng dụng chọn lọc. Trong trường hợp của tôi, tôi thực sự chỉ muốn các câu trả lời AJAX của tôi bị bỏ lại một mình để mã máy khách nhận được các thông báo lỗi dành cho nó. – Will

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