โหมด CustomErrors =“ ปิด”


254

ฉันได้รับข้อผิดพลาดทุกครั้งที่ฉันอัพโหลดเว็บแอปไปยังผู้ให้บริการ เนื่องจากโหมด customErrors ทั้งหมดที่ฉันเห็นคือข้อความ "ข้อผิดพลาดรันไทม์" เริ่มต้นสั่งให้ฉันปิด customErrors เพื่อดูเพิ่มเติมเกี่ยวกับข้อผิดพลาด

ทำให้โกรธฉันได้ตั้งค่าเว็บของฉันให้เป็นดังนี้:

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

และทั้งหมดที่ฉันได้รับคือหน้าข้อผิดพลาดระยะไกลที่โง่ไม่มีข้อมูลที่เป็นประโยชน์ ฉันสามารถทำอะไรได้อีกเพื่อปิด customErrors?!


1
ลองเพิ่ม@Model.Exception.Messageไปที่Shared/Error.cshtml
Muflix

โดยทั่วไปให้ระวังการแปลง config (เช่น Web.Debug.config ซึ่งสามารถเปลี่ยนค่านั้นได้) และระวังคำจำกัดความซ้ำของส่วน / คุณสมบัตินั้นในไฟล์ (เห็นได้ชัดว่าไม่ใช่ปัญหาในกรณีนี้)
Graham

คำตอบ:


164

นี่ทำให้ฉันเสียสติไปเมื่อสองสามวันที่ผ่านมาและไม่สามารถไปรอบ ๆ มันได้ แต่ได้คิดออก:

ในไฟล์ machine.config ของฉันฉันมีรายการภายใต้<system.web>:

<deployment retail="true" />

ดูเหมือนว่าจะแทนที่การตั้งค่า customError อื่น ๆ ที่คุณระบุในไฟล์ web.config ดังนั้นให้ตั้งค่ารายการด้านบนเป็น:

<deployment retail="false" />

ตอนนี้หมายความว่าฉันสามารถดูข้อความแสดงข้อผิดพลาดโดยละเอียดที่ฉันต้องการได้อีกครั้ง

machine.configตั้งอยู่ที่

32 บิต

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

64 บิต

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

หวังว่าจะช่วยให้ใครบางคนอยู่ที่นั่นและช่วยประหยัดเวลาในการดึงผมไม่กี่ชั่วโมง


จุดดี. เป็นการดีที่สุดที่จะเปลี่ยนโหมดการค้าปลีกกลับเป็นจริงเมื่อคุณดำเนินการเสร็จแล้ว (หรือปิดโหมดการดีบักใน web.config ซึ่งจะสร้างความรำคาญให้กับเครื่องพัฒนาของคุณ) ดูweblogs.asp.net/lasse/archive/2009/04/28/…
Stephen Kennedy

นี่น่าจะเป็นการตั้งค่าเริ่มต้นใน. NET 4.0 - ฉันมีปัญหาเดียวกันกับการหาคำตอบ ยอมรับว่าการตั้งค่าที่ดีที่จะใช้ในสภาพแวดล้อมการผลิต แต่การเห็นข้อผิดพลาด REAL นั้นสำคัญมากเมื่อทำการดีบั๊ก
Jeremy

ไม่เพียง แต่ช่วยประหยัดเวลาของฉัน แต่ยังช่วยชีวิตฉันด้วย นั่นคือสิ่งที่ทำงานให้ฉัน
Pouya Samie

142

"ปิด" เป็นกรณี ๆ ไป

ตรวจสอบว่า "O" เป็นตัวพิมพ์ใหญ่ในไฟล์ web.config ของคุณหรือไม่ฉันพบว่าสองสามครั้ง (ง่ายอย่างที่เห็น)


49

ในความสนใจของการเพิ่มสถานการณ์เพิ่มเติมในคำถามนี้ (เพราะนี่คือที่ที่ฉันดูเพราะฉันมีปัญหาเดียวกันแน่นอน) นี่คือคำตอบของฉัน:

ในกรณีของฉันฉันตัด / วางข้อความจากข้อผิดพลาดทั่วไปที่บอกว่ามีผลถ้าคุณต้องการดูว่ามีอะไรผิดปกติ

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

ดังนั้นนี่ควรจะแก้ไข แต่ไม่แน่นอน! ปัญหาของฉันคือมีโหนด <system.web> หลายบรรทัดด้านบน (ก่อนโหนดการรวบรวมและการพิสูจน์ตัวตน) และแท็กปิด </system.web> สองสามบรรทัดด้านล่าง เมื่อฉันแก้ไขสิ่งนี้แล้ว OK ปัญหาจะได้รับการแก้ไข สิ่งที่ฉันควรทำคือคัดลอก / วางเฉพาะบรรทัดนี้:

<customErrors mode="Off"/>

นี่คือบันทึกของสิ่งที่ฉันทำต่อไปซ้ำแล้วซ้ำอีกในบทที่ชื่อ "คัดลอกและวางหนทางสู่การทำลายล้าง"


คำถาม: คำตอบนี้แสดงถึงว่า ASP อ่าน web.config และไฟล์กำหนดค่าอื่น ๆ จากด้านบนคือ: จากบนลงล่าง ฉันคิดว่าไฟล์ config ถูกอ่านเป็น "อินสแตนซ์เดียว" ซึ่งหมายความว่าคอมไพเลอร์แยกวิเคราะห์ไฟล์ config ก่อนเพื่อความถูกต้องแล้วทำการคอมไพล์ แต่ดูเหมือนว่าจะคอมไพล์มันในแต่ละบรรทัด มันเป็นเรื่องจริงเหรอ?
Fandango68

@ Fernando68 นี่อาจเป็นคำถามที่ดีกว่า - การอภิปรายในความคิดเห็นนั้นไม่เหมาะสมที่สุด ฉันไม่ใช่วิศวกร. NET แต่เห็นได้ชัดว่า. NET ไม่ได้รวบรวมมันทีละบรรทัด มันเป็นไฟล์ Xml และเป็นลำดับขั้น แต่ถ้าลำดับชั้นเกิดขึ้นไม่ดีตัวแยกวิเคราะห์ XML จะส่งข้อยกเว้นขณะแยกวิเคราะห์ กล่าวอีกนัยหนึ่งมันต้องใช้ไฟล์ Xml ทั้งหมดโดยรวม - แต่ถ้าเจอ Xml ที่ไม่ดีจะไม่สามารถสร้างวัตถุที่ต้องการได้เลย!
Cyberherbalist

ฉันได้ยกคำถามนี้ขึ้นมาเป็นstackoverflow.com/questions/30471043/…คำถามแยกต่างหาก ขอบคุณสำหรับการตอบกลับของคุณซึ่งเป็นคำตอบที่ฉันได้รับจากโพสต์อื่น ไชโย
Fandango68

10

สำหรับแอปพลิเคชัน Sharepoint 2010 คุณควรแก้ไขC:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\web.configและกำหนด<customErrors mode="Off" />


7

ฉันลองของที่อธิบายไว้ที่นี่ส่วนใหญ่แล้ว ฉันใช้ VWD และไฟล์ web.config เริ่มต้นอยู่:

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

ฉันเปลี่ยน mode = "RemoteOnly" เป็น mode = "Off" ยังไม่มีความสุข ฉันใช้ตัวจัดการ IIS, คุณสมบัติ, แท็บ ASP.Net, แก้ไขการกำหนดค่าจากนั้นเลือกแท็บ CustomeErrors สิ่งนี้ยังแสดงให้เห็น RemoteOnly ฉันเปลี่ยนสิ่งนี้เป็นปิดและในที่สุดฉันก็เห็นข้อความแสดงข้อผิดพลาดโดยละเอียด

เมื่อฉันตรวจสอบ web.config ฉันเห็นว่ามี CustomErrors สองโหนดใน system.web; และฉันเพิ่งสังเกตเห็นว่ารายการที่สอง (รายการที่ฉันกำลังเปลี่ยนแปลงอยู่ในความคิดเห็น) ดังนั้นอย่าใช้ notepad เพื่อตรวจสอบ web.config บนเซิร์ฟเวอร์ระยะไกล

อย่างไรก็ตามถ้าคุณใช้ IIS แก้ไขการกำหนดค่าสิ่งที่มันจะบ่นเกี่ยวกับข้อผิดพลาดใน web.config จากนั้นคุณสามารถแยกแยะคำตอบทั้งหมดที่พูดว่า "มีข้อผิดพลาดทางไวยากรณ์ของ XML ใน web.config ของคุณหรือไม่"


การเปลี่ยน web.config ในระดับเว็บไซต์ใช้งานได้สำหรับฉัน ก่อนหน้านี้ฉันแก้ปัญหาด้วยการโหลดไฟล์ web.config ของแอปพลิเคชันล้มเหลว ขอบคุณ!
The1nk

7

คำตอบเดียวที่ใช้งานได้จริงในการแก้ไขปัญหานี้ฉันพบที่นี่: https://stackoverflow.com/a/18938991/550975

เพียงเพิ่มลงในของคุณweb.config:

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

3
ฉันพบ<httpErrors errorMode="Detailed" />ข้อมูลทั้งหมดที่ฉันต้องการ "
alastairtree

6

โดยทั่วไปคุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดได้ใน Event Viewer หากคุณสามารถเข้าถึงได้ ผู้ให้บริการของคุณอาจป้องกันข้อผิดพลาดที่กำหนดเองไม่ให้แสดงเลยโดยการแทนที่ใน machine.config หรือตั้งค่าแอตทริบิวต์การขายปลีกเป็นจริง ( http://msdn.microsoft.com/en-us/library/ms228298 () VS.80) .aspx )


5

ฉันยังมีปัญหานี้ แต่เมื่อใช้ Apache และ mod_mono สำหรับคนอื่นในสถานการณ์นั้นคุณต้องรีสตาร์ท Apache หลังจากเปลี่ยน web.config เพื่อบังคับให้อ่านเวอร์ชันใหม่


5

หากคุณยังคงได้รับหน้านั้นเป็นไปได้ว่ามันจะระเบิดขึ้นก่อนที่จะผ่าน Web.Config

ตรวจสอบให้แน่ใจว่า ASP.Net มีสิทธิ์ที่จำเป็นสำหรับสิ่งต่าง ๆ เช่นโฟลเดอร์. Net Framework, IIS Metabase เป็นต้นคุณมีวิธีการตรวจสอบว่า ASP.Net ติดตั้งอย่างถูกต้องและเชื่อมโยงกับ IIS อย่างถูกต้องหรือไม่?

แก้ไข: หลังจากความคิดเห็นของ Greg เกิดขึ้นกับฉันฉันคิดว่าสิ่งที่คุณโพสต์คือ web.config ที่น้อยที่สุดของคุณ ถ้าเป็นเช่นนั้นคุณสามารถโพสต์ทั้งเว็บได้หรือไม่


ไม่กี่ครั้งที่ฉันพบปัญหานี้มันกลับกลายเป็นข้อผิดพลาดในเว็บกำหนดค่า - ไปที่มันแน่นอนด้วยหวีหวีก่อน
Greg Hurlman

ใช่ทำให้โกรธฉันทำเว็บของฉันทับการตั้งค่าขั้นต่ำนี้ ยังไม่มีความสุข
Radu094

ผู้ใช้ในกลุ่มแอพพลิเคชั่นที่ใช้ไม่มีสิทธิ์ในการอ่านไปยังไดเรกทอรีที่แอพของฉันถูกปรับใช้ ยังไม่สามารถระบุได้ว่าทำไมฉันไม่สามารถรับข้อผิดพลาดเพื่อแสดงว่าแจ้งให้ฉันทราบว่าเป็นปัญหา
lambacck

บ่อยครั้งที่ข้อผิดพลาดนี้สามารถพบได้เฉพาะในบันทึกเหตุการณ์ระบบ / ความปลอดภัย (จนถึง IIS 7) แต่การเข้าถึงบันทึกเหตุการณ์ได้อย่างง่ายดายในกรณีส่วนใหญ่เป็นปัญหา
Nick Craver

5

ปัญหาของฉันคือฉันมีสิ่งนี้กำหนดไว้ใน 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
การเปลี่ยนเพื่อ<httpErrors errorMode="Detailed"ช่วยเป็นตัวอย่าง
it3xl

2

ที่จริงแล้วสิ่งที่ฉันคิดได้ในขณะที่โฮสต์แอปพลิเคชันเว็บของฉันคือรหัสที่คุณพัฒนาบนเครื่องของคุณนั้นเป็นเวอร์ชั่นที่สูงกว่า บริษัท โฮสติ้งที่ให้บริการคุณ หากคุณมีสิทธิ์ของผู้ดูแลระบบคุณอาจสามารถเปลี่ยนการสนับสนุนเวอร์ชัน Microsoft ASP.NET ภายใต้การตั้งค่าเว็บโฮสติ้ง


2

เรามีปัญหานี้และเป็นเพราะผู้ใช้ IIS ไม่สามารถเข้าถึงการกำหนดค่าเครื่องบนเว็บเซิร์ฟเวอร์


2

นอกจากนี้เรายังพบข้อผิดพลาดนี้และในกรณีของเรามันเป็นเพราะผู้ใช้กลุ่มแอพพลิเคชั่นไม่ได้รับอนุญาตให้ไฟล์ web.config อีกต่อไป เหตุผลที่สูญเสียสิทธิ์ (ทุกอย่างเรียบร้อยก่อน) เพราะเรามีข้อมูลสำรองของเว็บไซต์ในไฟล์ rar และฉันลากเวอร์ชันสำรองของ web.config จาก rar ลงในเว็บไซต์ ดูเหมือนว่าจะลบสิทธิ์ทั้งหมดไปยังไฟล์ web.config ยกเว้นสำหรับฉันผู้ใช้ที่เข้าสู่ระบบ

เราต้องใช้เวลาสักครู่กว่าจะคิดออกเพราะฉันตรวจสอบการอนุญาตในระดับโฟลเดอร์ซ้ำหลายครั้ง แต่ไม่เคยอยู่ในระดับไฟล์


2

ฉันมีปัญหาเดียวกัน แต่พบว่าวิธีแก้ปัญหาแตกต่างกัน

-

สิ่งที่ผมทำก็คือผมเปิดตั้งค่าขั้นสูงสำหรับแอพลิเคชันในการจัดการ IIS

มีผมตั้งเปิดใช้งานโปรแกรม 32 บิตเพื่อทรู


1

ลองเริ่มต้นแอปพลิเคชันใหม่ (สร้าง app_offline.htm มากกว่าการลบแอปพลิเคชัน) และถ้าคุณยังได้รับข้อความแสดงข้อผิดพลาดเดิมตรวจสอบให้แน่ใจว่าคุณได้ประกาศ customErrors เพียงครั้งเดียวใน web.config หรืออะไรทำนองนั้น ข้อผิดพลาดใน web.config อาจมีผลกระทบแปลก ๆ ในแอปพลิเคชัน


1
เมื่อใดก็ตามที่คุณแก้ไข web.config เว็บไซต์จะเริ่มต้นใหม่ไม่จำเป็นต้องสร้าง app_offline.htm!
Matt Frear

จริงฉันไม่รู้ว่าทำไมฉันแนะนำ app_offline เพื่อรีเซ็ตแอป :)
Adam Vigh

1

คุณมีตัวละครพิเศษเช่นæøåใน web.config ของคุณหรือไม่? ถ้าเป็นเช่นนั้นตรวจสอบให้แน่ใจว่าการเข้ารหัสถูกตั้งค่าเป็น utf-8


1

แอปพลิเคชันเว็บนี้ตั้งอยู่ด้านล่างแอพอื่น ๆ ในแผนผังไดเรกทอรีของเว็บไซต์หรือไม่ ตรวจสอบไฟล์ web.config หลัก ๆ เพื่อดูการตั้งค่าอื่น ๆ ถ้ามี นอกจากนี้ทำให้ไดเรกทอรีของคุณถูกตั้งค่าเป็นไดเรกทอรีแอปพลิเคชันใน IIS


1

หากคุณใช้ตัวอย่าง MVC 4 คุณอาจประสบกับปัญหานี้เพราะคุณกำลังใช้ HandleErrorAttribute พฤติกรรมเปลี่ยนไปใน 5 เพื่อที่จะไม่จัดการกับข้อยกเว้นถ้าคุณปิดข้อผิดพลาดที่กำหนดเอง


1

คุณสามารถลองนำเว็บไซต์ขึ้นมาในเบราว์เซอร์บนเครื่องเซิร์ฟเวอร์ ฉันไม่ได้พัฒนา ASP.NET มากนัก แต่ฉันจำได้ว่าข้อผิดพลาดที่กำหนดเองนั้นมีการตั้งค่าสำหรับการแสดงเฉพาะข้อความแสดงข้อผิดพลาดแบบเต็มบนเซิร์ฟเวอร์เป็นการวัดความปลอดภัย


1

ฉันเพิ่งจัดการกับปัญหาที่คล้ายกัน ในกรณีของฉันเว็บไซต์ asp.net เริ่มต้นคือ 1.1 ในขณะที่ฉันพยายามเริ่มต้นเว็บแอป 2.0 ข้อผิดพลาดค่อนข้างเล็กน้อย แต่ไม่ชัดเจนในทันทีว่าทำไมข้อผิดพลาดที่กำหนดเองจะไม่หายไปและรันไทม์ไม่เคยเขียนลงในบันทึกเหตุการณ์ การแก้ไขที่ชัดเจนคือจับคู่เวอร์ชันในแท็บ Asp.Net ของ IIS


เรามีปัญหาเดียวกัน โหนด "connectionstrings" ก่อให้เกิดข้อผิดพลาดภายใต้กรอบ 1.1 ในขณะที่แอปควรเป็น 2.0
mosheb


0

ฉันมีปัญหาเดียวกันและสาเหตุคือ IIS กำลังเรียกใช้ ASP.NET 1.1 และไซต์ที่ต้องการ. NET 2.0

ข้อความแสดงข้อผิดพลาดไม่ได้ทำอะไรเลยนอกจากทำให้ฉันปิดการติดตามเป็นเวลาหลายชั่วโมง


0

ให้แน่ใจว่าคุณเพิ่มทันทีหลังจาก system.web

ฉันวางไว้ที่ส่วนท้ายของโหนดและไม่ทำงาน


0

หากคุณกำลังเปลี่ยนรูปแบบการกำหนดค่าคุณอาจต้องลบบรรทัดต่อไปนี้ออกจากไฟล์ web.config ที่เกี่ยวข้อง

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

0

ต้องลองคำตอบทั้งหมดที่นี่มันกลับกลายเป็นว่าApplication_Errorวิธีการของฉันมีนี้:

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

การลบบรรทัดเหล่านี้และการตั้งค่าแก้ไขปัญหาได้ (ลูกค้ายังคงถูกเปลี่ยนเส้นทางไปยังหน้าข้อผิดพลาดด้วยcustomErrors="On")


0

ฉันมีปัญหาเดียวกันและฉันผ่านบันทึกแอปพลิเคชันตัวแสดงเหตุการณ์ซึ่งระบุอย่างชัดเจนเนื่องจากข้อยกเว้นนี้เกิดขึ้น ในกรณีของฉันมีข้อยกเว้นดังต่อไปนี้ ...

ข้อมูลข้อยกเว้น:

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.

ฉันเพิ่งอัปเดตรหัสผ่านของฉันในแอพพลิเคชั่นพูลและมันใช้งานได้สำหรับฉัน


0

อาจเป็นไปได้ในบางกรณีที่ web.config จัดรูปแบบไม่ถูกต้อง ในกรณีที่คุณต้องผ่านมันทีละบรรทัดก่อนที่จะทำงาน บ่อยครั้งที่การเขียนกฎใหม่เป็นผู้กระทำผิดที่นี่


0

มันแปลกมาก ฉันได้รับข้อผิดพลาดนี้และหลังจากรีบูตเซิร์ฟเวอร์ของฉันมันก็หายไป


0

สำหรับฉันมันเป็นข้อผิดพลาดที่สูงขึ้นใน web.config เหนือ system.web

ไฟล์ blah ไม่มีอยู่ดังนั้นจึงเกิดข้อผิดพลาดขึ้น ณ จุดนั้น เนื่องจากยังไม่ได้ไปยังส่วน System.Web แต่ยังใช้การตั้งค่าเริ่มต้นของเซิร์ฟเวอร์สำหรับ CUstomErrors (เปิด)


(โพสต์นี้ดูเหมือนจะไม่ให้คำตอบที่มีคุณภาพให้กับคำถามโปรดแก้ไขคำตอบของคุณและปรับปรุงให้ดีขึ้นหรือเพียงแค่โพสต์เป็นความคิดเห็นที่คำถาม..)
sɐunıɔןɐqɐp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.