Sự khác biệt giữa customErrors
và httpErrors
các phần của tệp web.config trong các ứng dụng ASP.NET MVC là gì?
Các hướng dẫn để sử dụng mỗi phần là gì?
Sự khác biệt giữa customErrors
và httpErrors
các phần của tệp web.config trong các ứng dụng ASP.NET MVC là gì?
Các hướng dẫn để sử dụng mỗi phần là gì?
Câu trả lời:
Tuyên bố từ chối trách nhiệm: Đây là từ kinh nghiệm của tôi và không được chứng minh thực tế.
Cả hai đều được sử dụng để xác định xử lý lỗi cho một trang web, nhưng phần mềm khác nhau đề cập đến các thành phần cấu hình khác nhau.
customErrors
là một yếu tố kế thừa (tương thích ngược), được sử dụng bởi Visual Studio Development Server (còn gọi là VSDS hoặc Cassini).
httpErrors
là phần tử mới chỉ được IIS7 sử dụng.
Điều này làm nổi bật khả năng vấn đề khi phát triển trang web ASP.NET trong khi sử dụng VSDS thay vì IIS cục bộ.
Ngoài ra, hãy tự mình tham khảo bài đăng này về cách xử lý các thông báo lỗi với IIS7, nếu bạn muốn có toàn quyền kiểm soát đầu ra lỗi.
VSDS
sử dụngcustomErrors
IIS6
- sử dụngcustomErrors
IIS7
- sử dụng httpErrors
.và nếu bạn phát triển cùng VSDS
nhưng xuất bản lên IIS7
, thì tôi đoán bạn sẽ cần cả hai.
* Cập nhật tháng 4 năm 2016
Thuộc tính customErrors được sử dụng khi mã .net đang ném ngoại lệ (404, 403, 500, v.v.) và thuộc tính httpErrors được sử dụng khi chính IIS đang ném ngoại lệ.
Có rất nhiều cạm bẫy khi cố gắng cấu hình chính xác. Vì vậy, nếu bạn đang tìm kiếm một ví dụ nhanh, 2 tùy chọn tốt nhất bạn có là:
Ví dụ 1: Sử dụng trang html
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.html" />
<error statusCode="404" redirect="/Error404.html" />
<error statusCode="500" redirect="/Error500.html" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="File" path="Error403.html" />
<error statusCode="404" responseMode="File" path="Error404.html" />
<error statusCode="500" responseMode="File" path="Error500.html" />
</httpErrors>
</system.webServer>
Ví dụ 2: sử dụng trang aspx
<system.web>
<customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
<error statusCode="403" redirect="/Error403.aspx" />
<error statusCode="404" redirect="/Error404.aspx" />
<error statusCode="500" redirect="/Error500.aspx" />
</customErrors>
</system.web>
<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
<remove statusCode="403" />
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
<error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
<error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
</httpErrors>
</system.webServer>
Và trong các trang lỗi aspx, bạn cần phải làm một cái gì đó như thế này (ví dụ trang 404):
<%
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>
Lưu ý: Không thể sử dụng tiện ích mở rộng ít url hơn trong phần customErrors ! . (không có hack)
Một cách giải quyết là vô hiệu hóa các lỗi tùy chỉnh và để lỗi http xử lý trang tùy chỉnh. Một người bạn đã tạo ra thiết lập như vậy, khi tôi tìm thấy một thời gian, tôi sẽ chia sẻ mã.
Lý lịch
Một trang lỗi tùy chỉnh tốt sẽ:
Vì vậy, để làm rõ một số tùy chọn trong cấu hình của chúng tôi:
<customErrors mode="RemoteOnly"
. Bạn có thể chỉ định ở đây: On
, Off
, RemoteOnly
.
On
= Luôn hiển thị các trang lỗi tùy chỉnhOff
= Luôn hiển thị lỗi thực sựRemoteOnly
= Hiển thị lỗi cục bộ, nhưng hiển thị trang lỗi tùy chỉnh từ xa. Vì vậy, chúng tôi muốn RemoteOnly
cho tuyên bố 1<customErrors redirectMode="ResponseRewrite"
. Bạn có thể chỉ định ở đây: ResponseRedirect
hoặc ResponseRewrite
. Các ResponseRedirect
chế độ sẽ chuyển hướng trang lỗi cho trang lỗi tùy chỉnh. Đối với trình thu thập liên kết (SEO), điều này sẽ dẫn đến 302 -> 500, nhưng bạn muốn trình thu thập liên kết gặp lỗi 500.
<httpErrors errorMode="DetailedLocalOnly"
. Điều này tương đương với customErrors
chế độ. Tùy chọn mà bạn có: Custom
, Detailed
, DetailedLocalOnly
.
Một bài đăng blog tốt đã giúp tôi rất nhiều là: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
đấu với <httpErrors>
<customErrors>
<httpErrors>
Lưu ý: không còn cần thiết phải sử dụng
customErrors
Nguồn trích dẫn: 404 tùy chỉnh và các trang lỗi trong ASP.NET (bài viết xuất sắc)
ExecuteURL
phục vụ nội dung động như trang .aspx ( path
giá trị phải là URL tương đối của máy chủ ):
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
<remove statusCode="404"/>
<error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
</httpErrors>
</system.webServer>
File
phục vụ tệp lỗi tùy chỉnh, chẳng hạn như trang .html:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
<remove statusCode="404"/>
<error statusCode="404" path="404.html" />
</httpErrors>
</system.webServer>
Tham khảo: Lỗi HTTP (www.iis.net)
để biết thêm chi tiết, hãy đọc liên kết www.iis.net ở trên
it's no loger necesary to use customErrors
và trích dẫn, đây thực sự là thông tin tôi có sau :-)
Phần lỗi trong cấu hình web là để cung cấp phương pháp xử lý lỗi http tùy chỉnh, có hai phần, một phần tùy chỉnh bên trong phần system.web và phần httpErrors khác bên trong phần system.webServer (như được đưa ra dưới đây)
customErrors: Phần này đã được sử dụng trước khi IIS 7 được giới thiệu, IIS 6 5 và trước khi sử dụng hoàn toàn phần này để xử lý các lỗi http tùy chỉnh theo mã trạng thái http.
httpErrors: IIS 7 trở lên sử dụng phần này cũng như phần customErrors để xử lý các lỗi http tùy chỉnh dựa trên phần mở rộng tệp của chúng nếu đăng ký tiện ích mở rộng trang với ISAPI dll (.aspx, ashx, .asmx, .svc, v.v.) như index.aspx Cài đặt chọn IIS từ phần tùy chỉnh. Mặt khác, cài đặt cài đặt từ httpErrors (Chế độ lưu trữ IIS 7 phải được đặt thành tâm trạng tích hợp không cổ điển)
dưới đây là các ví dụ dành cho liên kết kiểm tra xử lý lỗi 404: