Sự khác biệt giữa customErrors và httpErrors là gì?


168

Sự khác biệt giữa customErrorshttpErrorscá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ì?


1
IMHO - HttpError là một xử lý mức IIS cho các thông báo lỗi trong khi CustomError là xử lý ASP.Net cho các lỗi trong ứng dụng web. Nhưng rất muốn biết thêm ...
Sunny

Câu trả lời:


85

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.

Tóm lược:

  • Phát triển trong VSDSsử dụngcustomErrors
  • Xuất bản trang web để IIS6 - sử dụngcustomErrors
  • Xuất bản trang web để IIS7- sử dụng httpErrors.

và nếu bạn phát triển cùng VSDSnhưng xuất bản lên IIS7, thì tôi đoán bạn sẽ cần cả hai.


30
customErrors dành cho asp.net. httpErrors dành cho IIS7 và do đó xử lý nội dung không đi qua trình xử lý .net (ví dụ: .png, .js, v.v.) Nếu bạn muốn các trang lỗi cho các loại nội dung không phải là.net, hãy sử dụng các trang lỗi IIS (httpErrors cho IIS7 , giao diện người dùng cho IIS6.)
zcrar70

4
Tôi khuyên bạn nên cài đặt và sử dụng IIS 7 Express với Visual Studio cho mục đích gỡ lỗi. Nó sẽ sử dụng các tùy chọn cấu hình tương tự như IIS 7 thông thường, không giống như Cassini.
Sean

không còn cần thiết phải sử dụng customErrors của @johnB. Và quá cần thiết? 1.) bật "Gửi lỗi đến trình duyệt" trong phần "ASP". thuộc tính gỡ lỗi 2.) trong "Trang lỗi / Chỉnh sửa cài đặt tính năng", chọn "Lỗi chi tiết". 3.) vô hiệu hóa "Hiển thị thông báo lỗi HTTP thân thiện" trong IE stackoverflow.com/questions/2640526/ trên
Kiquenet

136

* 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ệ.

  • / myfakeextensionslessurl -> httpErrors 404
  • /myfakeaspsx.aspx -> customErrors 404
  • /myfakeimage.jpg -> httpErrors 404
  • /throw500.apx -> customErrors 500
  • / throw500 -> customErrors 500

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ẽ:

  1. Hiển thị ngoại lệ thực sự khi bạn truy cập trang vấn đề cục bộ
  2. Hiển thị trang tùy chỉnh khi bạn truy cập trang vấn đề từ xa
  3. Sẽ không chuyển hướng, mà chỉ hiển thị nội dung trang lỗi (vì lý do seo)
  4. Sẽ hiển thị mã trạng thái chính xác

Vì vậy, để làm rõ một số tùy chọn trong cấu hình của chúng tôi:

  1. <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ỉnh
    • Off = 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 RemoteOnlycho tuyên bố 1
  2. <customErrors redirectMode="ResponseRewrite". Bạn có thể chỉ định ở đây: ResponseRedirecthoặc ResponseRewrite. Các ResponseRedirectchế độ 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.

  3. <httpErrors errorMode="DetailedLocalOnly". Điều này tương đương với customErrorschế độ. 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


Kiểu nào tùy chỉnhErrors - httpErrors và IIS config như "Gửi lỗi đến trình duyệt" trong ASP - Thuộc tính gỡ lỗi"Trang lỗi / Chỉnh sửa cài đặt tính năng", "Lỗi chi tiết". ? stackoverflow.com/questions/2640526/ cường
Kiquenet

36

<customErrors> đấu với <httpErrors>


<customErrors>

  • vẫn có sẵn trong IIS7 +
  • chỉ định các trang lỗi tùy chỉnh cho các yêu cầu được xử lý bởi ASP.NET
  • chỉ xử lý các yêu cầu trong ứng dụng ASP.NET
  • Các tệp tĩnh như tệp HTML hoặc thư mục (URL thân thiện) không được xử lý URL

<httpErrors>

  • được giới thiệu trong IIS7
  • chỉ định các trang lỗi tùy chỉnh cho các yêu cầu được xử lý bởi IIS
  • xử lý các yêu cầu trong ứng dụng ASP.NET VÀ / HOẶC xử lý các yêu cầu bên ngoài - ứng dụng ASP.NET *
  • tất cả các tệp và URL được xử lý *

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)


ExecuteURLphục vụ nội dung động như trang .aspx ( pathgiá 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


Có thể hữu ích ** stackoverflow.com/questions/2640526/ từ ** nếu kết hợp httpErrors với "Gửi lỗi đến trình duyệt"Trang lỗi
Kiquenet

3
+1 cho ghi chú it's no loger necesary to use customErrorsvà trích dẫn, đây thực sự là thông tin tôi có sau :-)
Myster

4

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:

omeperrors vs customerrors trong webconfig, iis, asp.net

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.