Chế độ CustomErrors = Giảm giá trực tuyến


254

Tôi gặp lỗi mỗi khi tải ứng dụng web của mình lên nhà cung cấp. Do chế độ customErrors, tất cả những gì tôi thấy là thông báo "Lỗi thời gian chạy" mặc định, hướng dẫn tôi tắt customErrors để xem thêm về lỗi.

Bực tức, tôi đã đặt web.config của mình giống như thế này:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

Tuy nhiên, tất cả những gì tôi nhận được là trang lỗi từ xa ngu ngốc không có thông tin hữu ích trên đó. Tôi có thể làm gì khác để tắt tùy chỉnh TẮT?!


1
thử thêm @Model.Exception.MessagevàoShared/Error.cshtml
Muflix

Nói chung, coi chừng các biến đổi cấu hình (ví dụ Web.Debug.config có thể thay đổi giá trị đó) và xem ra các định nghĩa trùng lặp của phần / thuộc tính đó trong tệp (rõ ràng không phải là vấn đề trong trường hợp này)
Graham

Câu trả lời:


164

Điều này đã khiến tôi phát điên trong vài ngày qua và không thể khắc phục được nhưng cuối cùng đã tìm ra:

Trong tệp machine.config của tôi, tôi có một mục dưới <system.web>đây:

<deployment retail="true" />

Điều này dường như ghi đè mọi cài đặt customError khác mà bạn đã chỉ định trong tệp web.config, vì vậy hãy đặt mục nhập ở trên thành:

<deployment retail="false" />

bây giờ có nghĩa là tôi có thể một lần nữa nhìn thấy các thông báo lỗi chi tiết mà tôi cần.

The machine.confignằm ở

32-bit

%windir%\Microsoft.NET\Framework\[version]\config\machine.config

64-bit

%windir%\Microsoft.NET\Framework64\[version]\config\machine.config 

Hy vọng rằng sẽ giúp ai đó ra khỏi đó và tiết kiệm một vài giờ kéo tóc.


Điểm tốt. Tuy nhiên, tốt nhất là chuyển chế độ bán lẻ thành đúng khi bạn hoàn thành (hoặc tắt chế độ gỡ lỗi trong web.config, điều này sẽ gây khó chịu cho máy phát triển của bạn). Xem weblogs.asp.net/lasse/archive/2009/04/11/NH
Stephen Kennedy

Đây có vẻ là một thiết lập mặc định trong .NET 4.0 - Tôi gặp khó khăn tương tự khi tìm ra nó. Đồng ý rằng đó là một cài đặt tốt để sử dụng trong môi trường sản xuất, nhưng thấy lỗi THỰC SỰ là rất quan trọng khi gỡ lỗi.
Jeremy

không chỉ tiết kiệm thời gian của tôi mà còn cứu mạng tôi đó chính xác là những gì làm việc cho tôi
Pouya Samie

142

"Tắt" là trường hợp nhạy cảm.

Kiểm tra xem chữ "O" có viết hoa trong tệp web.config không, tôi đã chịu đựng điều đó một vài lần (đơn giản như âm thanh)


49

Vì lợi ích của việc thêm nhiều tình huống vào câu hỏi này (vì đây là nơi tôi đã xem vì tôi gặp vấn đề tương tự chính xác), đây là câu trả lời của tôi:

Trong trường hợp của tôi, tôi đã cắt / dán văn bản từ lỗi chung có hiệu lực nếu bạn muốn xem có gì sai, đặt

<system.web>
   <customErrors mode="Off"/>
</system.web>

Vì vậy, điều này nên đã sửa nó, nhưng tất nhiên là không! Vấn đề của tôi là có một nút <system.web> ở trên (trước nút tổng hợp và xác thực) và thẻ đóng </system.web> một vài dòng bên dưới. Khi tôi sửa lỗi này, OK, vấn đề đã được giải quyết. Những gì tôi nên làm là sao chép / dán chỉ dòng này:

<customErrors mode="Off"/>

Đây là từ biên niên sử của những điều ngu ngốc tôi cứ làm đi làm lại nhiều lần, trong chương có tên "Sao chép và dán theo cách của bạn để phá hủy".


Câu hỏi: Câu trả lời này ngụ ý rằng ASP đọc web.config và các tệp cấu hình khác từ trên xuống, tức là: từ trên xuống. Tôi nghĩ rằng các tệp cấu hình được đọc dưới dạng "một trường hợp duy nhất" có nghĩa là trình biên dịch trước tiên phân tích tệp cấu hình cho chính xác và sau đó biên dịch nó, nhưng dường như nó đang biên dịch nó một cách nhanh chóng. Điều đó có đúng không?
Fandango68

@ Fernando68, điều này tốt hơn có thể được đặt thành một câu hỏi riêng biệt - một cuộc thảo luận trong các bình luận không chính xác tối ưu. Tôi không phải là kỹ sư .NET, nhưng rõ ràng .NET không biên dịch từng dòng một. Đó là một tệp Xml và do đó được phân cấp. Nhưng nếu hệ thống phân cấp được hình thành kém, trình phân tích cú pháp Xml sẽ đưa ra một ngoại lệ trong khi phân tích cú pháp. Nói cách khác, nó phải lấy toàn bộ tệp Xml - nhưng nếu nó gặp Xml xấu, nó hoàn toàn không thể xây dựng đối tượng cần thiết!
Chuyên gia điện tử

Tôi đã đưa ra nó như một stackoverflow.com/questions/30471043/ cấp . Cảm ơn phản hồi của bạn, đó là câu trả lời tôi nhận được trong bài viết khác của tôi. Chúc mừng
Fandango68

10

Đối với các ứng dụng Sharepoint 2010, bạn cũng nên chỉnh sửa C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\web.configvà xác định<customErrors mode="Off" />


7

Tôi đã thử hầu hết những thứ được mô tả ở đây. Tôi đã sử dụng VWD và tệp web.config mặc định có chứa:

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="NoAccess.htm" />
        <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>

Tôi đã thay đổi mode = "RemoteOnly" thành mode = "Tắt". Vẫn không có niềm vui. Sau đó, tôi đã sử dụng trình quản lý IIS, thuộc tính, Tab ASP.Net, Chỉnh sửa cấu hình, sau đó chọn tab CustomeErrors. Điều này vẫn hiển thị RemoteOnly. Tôi đã thay đổi thành Tắt và cuối cùng tôi có thể thấy các thông báo lỗi chi tiết.

Khi tôi kiểm tra web.config tôi thấy rằng có hai nút CustomErrors trong system.web; và tôi vừa nhận thấy rằng mục thứ hai (mục tôi đang thay đổi nằm trong một bình luận). Vì vậy, cố gắng không sử dụng notepad để kiểm tra web.config trên máy chủ từ xa.

Tuy nhiên, nếu bạn sử dụng công cụ cấu hình chỉnh sửa IIS, nó sẽ phàn nàn về các lỗi trong web.config. Sau đó, bạn có thể loại trừ tất cả các câu trả lời có nội dung "có lỗi cú pháp XML trong web.config"


Thay đổi web.config ở cấp Trang web đã giúp tôi. Trước đây tôi đã sửa lại tải tập tin web.config của ứng dụng, không thành công. Cảm ơn!
The1nk

7

Câu trả lời thực sự hiệu quả để khắc phục điều này tôi tìm thấy ở đây: https://stackoverflow.com/a/18938991/550975

Chỉ cần thêm nó vào web.config:

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

3
Tôi tìm thấy <httpErrors errorMode="Detailed" />đã cho tôi tất cả thông tin tôi cần `
alastairtree


5

Tôi cũng gặp vấn đề này, nhưng khi sử dụng Apache và mod_mono. Đối với bất kỳ ai khác trong tình huống đó, bạn cần khởi động lại Apache sau khi thay đổi web.config để buộc phiên bản mới được đọc.


5

Nếu bạn vẫn nhận được trang đó, có khả năng nó sẽ nổ tung trước khi vượt qua Web.Config

Đảm bảo rằng ASP.Net có các quyền cần thiết cho những thứ như thư mục .Net Framework, IIS Metabase, v.v. Bạn có cách nào kiểm tra xem ASP.Net được cài đặt đúng và được liên kết chính xác trong IIS không?

Chỉnh sửa: Sau khi bình luận của Greg xảy ra với tôi, tôi cho rằng những gì bạn đăng là toàn bộ web.config, có nhiều hơn thế không? Nếu vậy bạn có thể đăng toàn bộ web.config không?


Một vài lần tôi gặp phải vấn đề này, hóa ra đó là một lỗi trong web.config - trước tiên hãy khắc phục nó với một chiếc lược có răng tốt.
Greg Hurlman

Có, bực tức Tôi đã ghi đè web.config vào cài đặt tối thiểu này. Vẫn không có niềm vui
Radu094

Người dùng trên nhóm ứng dụng đang được sử dụng không có quyền đọc vào thư mục mà ứng dụng của tôi đã được triển khai. Vẫn không thể hiểu tại sao tôi không thể gặp lỗi để cho tôi biết rằng đó là vấn đề.
lambacck

Thường thì lỗi này chỉ có thể được tìm thấy trong nhật ký sự kiện hệ thống / bảo mật (cho đến IIS 7), nhưng việc truy cập vào nhật ký sự kiện dễ dàng trong hầu hết các trường hợp là sự cố.
Nick Craver

5

Vấn đề của tôi là tôi đã xác định điều này trong web.config

<httpErrors errorMode="Custom" existingResponse="Replace">
  <remove statusCode="404" />
  <remove statusCode="500" />
  <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
  <error statusCode="500" responseMode="ExecuteURL" path="/Error/Internal" />
</httpErrors>

2
Một sự thay thế để <httpErrors errorMode="Detailed"giúp làm ví dụ
it3xl

2

Trên thực tế, những gì tôi đã tìm ra khi lưu trữ ứng dụng web của mình là mã bạn đã phát triển trên Máy cục bộ của mình có phiên bản cao hơn công ty lưu trữ cung cấp cho bạn. Nếu bạn có quyền quản trị viên, bạn có thể thay đổi hỗ trợ phiên bản Microsoft ASP.NET trong cài đặt lưu trữ web


2

Chúng tôi đã gặp sự cố này và đó là do người dùng IIS không có quyền truy cập vào cấu hình máy trên máy chủ web.


2

Chúng tôi cũng gặp phải lỗi này và trong trường hợp của chúng tôi là do người dùng nhóm ứng dụng không còn quyền đối với tệp web.config nữa. Lý do nó bị mất quyền (mọi thứ đều ổn trước đây) là vì chúng tôi đã sao lưu trang web trong một tệp rar và tôi đã kéo một phiên bản sao lưu của web.config từ rar vào trang web. Điều này dường như đã xóa tất cả các quyền đối với tệp web.config ngoại trừ tôi, người dùng đã đăng nhập.

Chúng tôi đã mất một thời gian để tìm ra điều này bởi vì tôi liên tục kiểm tra các quyền ở cấp thư mục, nhưng không bao giờ ở cấp độ tệp.


2

Tôi đã có cùng một vấn đề nhưng tìm thấy giải quyết theo một cách khác.

-

Những gì tôi đã làm là, tôi đã mở Cài đặt nâng cao cho Nhóm ứng dụng trong Trình quản lý IIS .

Ở đó tôi đặt Bật ứng dụng 32 bit thành True .


1

Hãy thử khởi động lại ứng dụng (tạo app_offline.htm hơn là xóa nó đi) và nếu bạn vẫn nhận được thông báo lỗi tương tự, hãy đảm bảo rằng bạn chỉ khai báo customErrors một lần trong web.config hoặc bất cứ điều gì tương tự. Lỗi trong web.config có thể có một số tác động kỳ lạ trên ứng dụng.


1
bất cứ khi nào bạn sửa đổi web.config trang web sẽ được khởi động lại, không cần phải tạo app_offline.htm!
Matt Frear

đúng, tôi không biết tại sao tôi lại đề xuất app_offline để đặt lại ứng dụng. :)
Adam Vigh

1

Bạn có nhân vật đặc biệt nào như æøå trong web.config không? Nếu vậy hãy chắc chắn rằng mã hóa được đặt thành utf-8.


1

Ứng dụng web này có được đặt bên dưới bất kỳ ứng dụng nào khác trong cây thư mục của trang web không? Kiểm tra bất kỳ tệp web.config cha nào để biết các cài đặt khác, nếu có. Ngoài ra, làm cho thư mục của bạn được đặt làm thư mục ứng dụng trong IIS.


1

Nếu bạn đang sử dụng bản xem trước MVC 4, bạn có thể gặp phải điều này vì bạn đang sử dụng HandErrorAttribution. Hành vi đã thay đổi trong 5 để nó không xử lý ngoại lệ nếu bạn tắt các lỗi tùy chỉnh.


1

Bạn cũng có thể thử đưa lên trang web trong một trình duyệt trên máy chủ. Tôi không thực hiện nhiều quá trình phát triển ASP.NET, nhưng tôi nhớ điều lỗi tùy chỉnh có một cài đặt chỉ hiển thị toàn bộ văn bản lỗi trên máy chủ, như một biện pháp bảo mật.


1

Tôi vừa xử lý vấn đề tương tự. Trong trường hợp của tôi, phiên bản asp.net mặc định là 1.1 trong khi tôi đang cố gắng khởi động một ứng dụng web 2.0. Lỗi này khá nhỏ, nhưng không rõ tại sao các lỗi tùy chỉnh sẽ không biến mất và thời gian chạy không bao giờ được ghi vào nhật ký sự kiện. Sửa lỗi rõ ràng là để phù hợp với phiên bản trong tab Asp.Net của IIS.


chúng tôi đã có cùng một vấn đề. Nút "kết nối" đã gây ra lỗi trong khung 1.1, trong khi ứng dụng nên là 2.0
mosheb

1

Ngoài ra, hãy đảm bảo bạn đang chỉnh sửa web.config chứ không phải website.config như tôi đang làm.


0

Tôi đã có cùng một vấn đề và nguyên nhân là IIS đang chạy ASP.NET 1.1 và trang web yêu cầu .NET 2.0.

Thông báo lỗi không làm gì ngoài việc ném tôi đi theo dõi trong vài giờ.


0

Hãy chắc chắn rằng bạn thêm ngay sau system.web

Tôi đặt nó vào cuối nút và không hoạt động.


0

Nếu bạn đang thực hiện chuyển đổi cấu hình, bạn cũng có thể cần xóa dòng sau khỏi tệp web.config có liên quan.

<compilation xdt:Transform="RemoveAttributes(debug)" />

0

Đã thử tất cả các câu trả lời ở đây, hóa ra Application_Errorphương pháp của tôi có điều này:

Server.ClearError();
Response.Redirect("/Home/Error");

Loại bỏ những dòng này và thiết lập đã khắc phục vấn đề. (Máy khách vẫn được chuyển hướng đến trang lỗi với customErrors="On").


0

Tôi đã có cùng một vấn đề, và tôi đã đi qua nhật ký ứng dụng Trình xem sự kiện nơi nó đề cập rõ ràng do ngoại lệ này xảy ra. Trong trường hợp của tôi, ngoại lệ là như sau ...

Thông tin ngoại lệ:

Exception type: HttpException 
Exception message: The target principal name is incorrect.  Cannot generate SSPI context.
at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)

The target principal name is incorrect.  Cannot generate SSPI context.

Tôi vừa cập nhật mật khẩu của mình trong nhóm ứng dụng và nó hoạt động với tôi.


0

Cũng có thể trong một số trường hợp web.config không được định dạng chính xác. Trong trường hợp đó bạn phải đi qua từng dòng một trước khi hoạt động. Thông thường, các quy tắc viết lại là thủ phạm ở đây.


0

Điều đó thực sự kỳ lạ. Tôi đã gặp lỗi này và sau khi khởi động lại máy chủ của tôi, nó đã biến mất.


0

Đối với tôi đó là một lỗi cao hơn trong web.config phía trên system.web.

tập tin blah không tồn tại vì vậy nó đã gây ra lỗi tại thời điểm đó. Bởi vì nó chưa vào phần System.Web nhưng nó đang sử dụng cài đặt mặc định của máy chủ cho CUstomErrors (Bật)


(Bài đăng này dường như không cung cấp câu trả lời chất lượng cho câu hỏi. Vui lòng chỉnh sửa câu trả lời của bạn và cải thiện câu hỏi hoặc chỉ đăng nó dưới dạng nhận xét cho câu hỏi.)
sɐunıɔ qɐp
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.