ความแตกต่างระหว่างcustomErrors
และhttpErrors
ส่วนของไฟล์ web.config ในแอปพลิเคชัน ASP.NET MVC คืออะไร?
แนวทางในการใช้แต่ละส่วนมีอะไรบ้าง
ความแตกต่างระหว่างcustomErrors
และhttpErrors
ส่วนของไฟล์ web.config ในแอปพลิเคชัน ASP.NET MVC คืออะไร?
แนวทางในการใช้แต่ละส่วนมีอะไรบ้าง
คำตอบ:
ข้อจำกัดความรับผิดชอบ: นี่คือจากประสบการณ์ของฉันและไม่ได้พิสูจน์ความจริง
ทั้งสองใช้เพื่อกำหนดการจัดการข้อผิดพลาดสำหรับเว็บไซต์ แต่ซอฟต์แวร์ต่างกันอ้างถึงองค์ประกอบการกำหนดค่าที่แตกต่างกัน
customErrors
เป็นองค์ประกอบดั้งเดิม (เข้ากันได้ย้อนหลัง) ซึ่งใช้โดย Visual Studio Development Server (aka. VSDS หรือ Cassini)
httpErrors
เป็นองค์ประกอบใหม่ที่ใช้โดย IIS7 เท่านั้น
สิ่งนี้เน้นถึงปัญหาที่เป็นไปได้เมื่อพัฒนาเว็บไซต์ ASP.NET ขณะใช้ VSDS แทน IIS ท้องถิ่น
นอกจากนี้อ้างถึงโพสต์นี้ด้วยตัวเองเกี่ยวกับวิธีการจัดการข้อความแสดงข้อผิดพลาดกับ IIS7 หากคุณต้องการควบคุมเอาท์พุทข้อผิดพลาดแบบเต็ม
VSDS
ใช้งานcustomErrors
IIS6
ใช้customErrors
IIS7
- httpErrors
การใช้งานและถ้าคุณพัฒนาด้วยVSDS
แต่เผยแพร่ต่อIIS7
ฉันคิดว่าคุณจะต้องใช้ทั้งคู่
* อัปเดตเมื่อเมษายน 2559
แอตทริบิวต์ customErrors ใช้เมื่อรหัส. NET กำลังทำการโยนข้อยกเว้น (404, 403, 500 ฯลฯ ) และแอตทริบิวต์ httpErrors จะใช้เมื่อ IIS เองกำลังทำการยกเว้น
มีข้อผิดพลาดมากมายที่พยายามกำหนดค่านี้อย่างถูกต้อง ดังนั้นหากคุณกำลังมองหาตัวอย่างรวดเร็วตัวเลือกที่ดีที่สุดที่คุณมีคือ:
ตัวอย่างที่ 1: การใช้หน้า 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>
ตัวอย่างที่ 2: การใช้หน้า 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>
และในหน้าข้อผิดพลาด aspx คุณต้องทำสิ่งนี้ (หน้า 404 ตัวอย่าง):
<%
Response.StatusCode = 404;
Response.TrySkipIisCustomErrors = true;
%>
หมายเหตุ: ไม่สามารถใช้ URL ส่วนขยายในส่วน customErrors ได้! . (ไม่มีแฮ็ก)
สิ่งหนึ่งที่ควรแก้ไขคือการปิดการใช้งานข้อผิดพลาดที่กำหนดเองและให้ http ข้อผิดพลาดในการจัดการเพจที่กำหนดเอง เพื่อนได้สร้างการตั้งค่าดังกล่าวเมื่อฉันหาเวลาฉันจะแบ่งปันรหัส
พื้นหลัง
หน้าข้อผิดพลาดที่กำหนดเองที่ดีจะ:
ดังนั้นเพื่อชี้แจงตัวเลือกบางอย่างในการกำหนดค่าของเรา:
<customErrors mode="RemoteOnly"
. On
คุณสามารถระบุที่นี่: Off
, RemoteOnly
,
On
= แสดงหน้าข้อผิดพลาดที่กำหนดเองเสมอOff
= แสดงข้อผิดพลาดจริงเสมอRemoteOnly
= แสดงข้อผิดพลาดในเครื่อง แต่แสดงหน้าข้อผิดพลาดที่กำหนดเองจากระยะไกล ดังนั้นเราต้องการRemoteOnly
คำสั่ง 1<customErrors redirectMode="ResponseRewrite"
. คุณสามารถระบุที่นี่: หรือResponseRedirect
โหมดจะเปลี่ยนเส้นทางหน้าข้อผิดพลาดไปยังหน้าข้อผิดพลาดที่กำหนดเอง สำหรับโปรแกรมรวบรวมข้อมูลลิงก์ (SEO) สิ่งนี้จะส่งผลให้ 302 -> 500 แต่คุณต้องการให้โปรแกรมรวบรวมข้อมูลลิงก์ได้รับข้อผิดพลาด 500ResponseRewrite
ResponseRedirect
<httpErrors errorMode="DetailedLocalOnly"
. สิ่งนี้เทียบเท่าcustomErrors
โหมด Custom
ตัวเลือกที่คุณได้: Detailed
, DetailedLocalOnly
,
โพสต์บล็อกที่ดีซึ่งช่วยฉันได้มากคือ: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>
กับ <httpErrors>
<customErrors>
<httpErrors>
หมายเหตุ: ไม่จำเป็นต้องใช้อีกต่อไป
customErrors
แหล่งที่มาอ้างถึง: 404 ที่กำหนดเองและหน้าข้อผิดพลาดใน ASP.NET (บทความที่ยอดเยี่ยม)
ExecuteURL
แสดงเนื้อหาแบบไดนามิกเช่นหน้า. aspx ( path
ค่าจะต้องเป็นURL ที่เกี่ยวข้องกับเซิร์ฟเวอร์ ):
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
<remove statusCode="404"/>
<error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
</httpErrors>
</system.webServer>
File
ให้บริการไฟล์ข้อผิดพลาดที่กำหนดเองเช่นหน้า. html:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
<remove statusCode="404"/>
<error statusCode="404" path="404.html" />
</httpErrors>
</system.webServer>
การอ้างอิง: HTTP Errors (www.iis.net)
สำหรับรายละเอียดเพิ่มเติมอ่านลิงค์ www.iis.net ด้านบน
it's no loger necesary to use customErrors
และการอ้างอิงนี่เป็นข้อมูลจริง ๆ ที่ฉันได้รับหลังจาก :-)
ส่วนข้อผิดพลาดในการกำหนดค่าเว็บมีไว้เพื่อให้วิธีการจัดการข้อผิดพลาด http แบบกำหนดเองมีสองส่วนคือหนึ่ง customErrors ภายในส่วน system.web และ httpErrors อื่นภายในส่วน system.webServer (ตามที่ระบุด้านล่าง)
customErrors: ส่วนนี้มีการใช้งานก่อนที่จะมีการเปิดตัว IIS 7, IIS 6 5 และก่อนที่จะใช้ส่วนนี้อย่างเต็มที่สำหรับการจัดการข้อผิดพลาด http ที่กำหนดเองตามรหัสสถานะ http
httpErrors: IIS 7 และใหม่กว่าใช้ส่วนนี้รวมถึงส่วนcustomErrorsเพื่อจัดการข้อผิดพลาด http แบบกำหนดเองตามส่วนขยายของไฟล์หากมีการร้องขอการลงทะเบียนส่วนขยายของหน้ากับ ISAPI dll (.aspx, ashx, .asmx, .sx ฯลฯ ) เช่น index.aspx IIS รับการตั้งค่าจากส่วนcustomeErrorsมิฉะนั้นจะรับการตั้งค่าจากhttpErrors (ต้องมีการตั้งค่าโหมดโฮสต์ IIS 7 เป็นอารมณ์แบบรวมไม่คลาสสิค)
ด้านล่างนี้เป็นตัวอย่างสำหรับการเชื่อมโยงตรวจสอบข้อผิดพลาด 404: