ความแตกต่างระหว่าง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ใช้งานcustomErrorsIIS6ใช้customErrorsIIS7- 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 แต่คุณต้องการให้โปรแกรมรวบรวมข้อมูลลิงก์ได้รับข้อผิดพลาด 500ResponseRewriteResponseRedirect
<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: