วิธีการสร้างรายงานหน้าใน ASP.NET โดยใช้ Visual C# .NET ของข้อผิดพลาดแบบกำหนดเอง

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 306355 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

เนื้อหาบนหน้านี้

สรุป

บทความนี้อธิบายวิธีการใช้รหัส Visual C# .NET เพื่อพิมพ์ทับ และตอบสนองต่อข้อผิดพลาดเมื่อเกิดขึ้นใน ASP.NET ASP.NET ได้ทำการปรับปรุงข้อผิดพลาดในการจัดการตัวเลือกจากดั้งเดิม Microsoft Active Server Page (ASP) ใน ASP.NET คุณสามารถจัดการกับข้อผิดพลาดในหลายระดับที่แตกต่างกันในโปรแกรมประยุกต์ของคุณ

คุณลักษณะใหม่ใน ASP.NET

ASP.NET เสนอก้าวหลายวิธีคุณสามารถจัดการ และตอบสนองต่อข้อผิดพลาด ใน ASP ดั้งเดิม จัดการกับข้อผิดพลาดที่ มี "ต่อบนข้อผิดพลาดต่อไป" (หรือบล็อกลองตามใน JScript) อีกวิธีหนึ่งคือ ถ้าคุณกำลังเรียกใช้ Microsoft Internet Information Services (IIS) 5.0 คุณใช้วัตถุASPErrorเพื่อสร้างหน้ารายงานข้อผิดพลาดแบบกำหนดเอง อย่างไรก็ตาม ใกล้เข้าเหล่านี้มีข้อจำกัดของตนเอง

ASP.NET มีหลายระดับซึ่งคุณสามารถจัดการ และตอบสนองต่อข้อผิดพลาดที่อาจเกิดขึ้นเมื่อคุณเรียกใช้โปรแกรมประยุกต์ ASP.NET ASP.NET แสดงสามวิธีหลักที่ช่วยให้คุณสามารถพิมพ์ทับ และตอบสนองต่อข้อผิดพลาดเมื่อเกิดขึ้น: Page_Error, Application_Errorและแฟ้มการกำหนดค่าของแอพลิเคชัน (Web.config)

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

วิธีการใช้เมธอด Page_Error

ตัวจัดการเหตุการณ์Page_Errorแสดงวิธีการพิมพ์ทับข้อผิดพลาดที่เกิดขึ้นในระดับเพจ คุณเพียงแต่สามารถแสดงข้อมูลข้อผิดพลาด (ตามตัวอย่างรหัสการติดตามไม่), หรือคุณสามารถบันทึกเหตุการณ์ หรือทำการกระทำบางอย่างได้

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

ตัวอย่างนี้แสดงเป็น null เว้น ซึ่งบังคับให้มีข้อผิดพลาดเกิดขึ้นในตัวจัดการเหตุการณ์Page_Load ทำตามขั้นตอนเหล่านี้เพื่อสร้างเพจเริ่มต้นที่จะแสดงให้เห็นถึงการใช้ตัวจัดการเหตุการณ์Page_Error
  1. ทำตามขั้นตอนเหล่านี้เพื่อเพิ่มแฟ้มใหม่ที่มีชื่อ PageEvent.aspxto โครงการของคุณ:
    1. เปิด Microsoft Visual Studio .NET
    2. ในโซลูชัน Explorer คลิกขวาโหนโครงการ ชี้ไปที่เพิ่มและจากนั้น คลิกเพิ่มแบบฟอร์มเว็บ
    3. ในกล่องข้อความชื่อพิมพ์ PageEvent.aspxแล้ว คลิกเปิด
  2. เพิ่มรหัสต่อไปนี้: PageEvent.aspx
    <script language=C# runat="server">
    void Page_Load(object sender, System.EventArgs e)
    {
    	throw(new ArgumentNullException());
    }
    
    public void Page_Error(object sender,EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"<b>Error Caught in Page_Error event</b><hr><br>" + 
    			"<br><b>Error in: </b>" + Request.Url.ToString() +
    			"<br><b>Error Message: </b>" + objErr.Message.ToString()+
    			"<br><b>Stack Trace:</b><br>" + 
    	                  objErr.StackTrace.ToString();
    	Response.Write(err.ToString());
    	Server.ClearError();
    }
    </script> 
    					

    หมายเหตุ ในตัวอย่างรหัสนี้ แอตทริบิวต์AutoEventWireupไม่ได้อย่างชัดเจนกำหนด ถ้าคุณทำอย่างไม่ชัดเจนค่าแอตทริบิวต์AutoEventWireup assigna การเริ่มต้นค่าจริงไว้ ถ้าคุณกำลังใช้ Visual Studio .NET พัฒนา yourapplications รหัสของต้นแบบเว็บฟอร์มตั้งค่าแอตทริบิวต์AutoEventWireupเป็นfalseอย่างชัดเจน ไม่มีความแตกต่างที่สำคัญระหว่างใช้ค่าเริ่มต้นค่า thatASP.NET และค่าเริ่มต้นที่ codeassigns แม่แบบใน Visual Studio .NET กับแอตทริบิวต์นี้ ถ้ามีตั้งค่าแอตทริบิวต์AutoEventWireupเป็นfalseตัวจัดการเหตุการณ์ที่ประกาศในนี้Notfire ทำเพจ ASPX กรณีนี้อาจสับสนได้ถ้าคุณไม่ทราบเกี่ยวกับ thisfunctionality
  3. จากเมนูแฟ้มคลิกบันทึก PageEvent.aspx
  4. คลิกขวาเพจ และจากนั้น คลิกแสดงในเบราว์เซอร์เพื่อเรียกใช้เพจ ขอให้สังเกตว่าจะเกิดข้อผิดพลาดและ reportedaccording กับรหัสข้อมูลจำเพาะ
หมายเหตุ คุณอาจสังเกตเห็นว่า รหัสออกการเรียกไปยังServer.ClearError ซึ่งป้องกันข้อผิดพลาดจากการดำเนินการตัวจัดการเหตุการณ์Application_Error

นอกจากนี้ คุณควรยังจดของแอตทริบิวต์Inheritsในคำสั่ง@ หน้า ถ้ามีตั้งInheritsคุณต้องสร้างโครงการก่อนที่คุณเรียกดูเพจ ถ้าคุณสร้างโครงการก่อน คุณได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:
'Project.PageEvent' ไม่ใช่ชนิดถูกต้อง

วิธีการใช้เมธอด Application_Error

คล้ายกับตัวจัดการเหตุการณ์Page_Errorคุณสามารถใช้ตัวจัดการเหตุการณ์Application_Errorเพื่อพิมพ์ทับข้อผิดพลาดที่เกิดขึ้นในโปรแกรมประยุกต์ของคุณ คุณสามารถเข้าสู่ข้อมูลข้อผิดพลาดของแอพลิเคชัน หรือจัดการข้อผิดพลาดระดับโปรแกรมประยุกต์อื่น ๆ ที่อาจเกิดขึ้นเนื่องจากขอบเขตทั่วทั้งแอพลิเคชันของเหตุการณ์

ตัวอย่างเป็นไปตามตามตัวอย่างรหัสPage_Errorก่อนหน้านี้ และจะสามารถใช้งานได้ถ้ามีข้อผิดพลาดในPage_Loadถูกโจมตีในตัวจัดการเหตุการณ์Page_Errorไม่ ตัวจัดการเหตุการณ์Application_Errorถูกระบุไว้ในแฟ้ม Global.asax ของแอพลิเคชันของคุณ เรา ขั้นตอนต่าง ๆ ในส่วนนี้สร้างเพจใหม่ที่อยู่นอกกระบวนข้อยกเว้น พิมพ์ทับข้อผิดพลาดในตัวจัดการเหตุการณ์Application_Errorของแฟ้ม Global.asax และเขียนข้อผิดพลาดในแฟ้มบันทึกเหตุการณ์ ขั้นตอนต่อไปนี้แสดงให้เห็นถึงวิธีการใช้เมธอดApplication_Error :
  1. เพิ่มแฟ้มใหม่ที่มีชื่อว่า AppEvent.aspx ถึง yourproject
  2. เพิ่มรหัสต่อไปนี้: AppEvent.aspx
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    หมายเหตุ ข้อมูลที่กล่าวถึงในส่วน "Page_Error" เกี่ยวกับแอตทริบิวต์AutoEventWireupยังใช้กับโค้ดตัวอย่างในขั้นตอนนี้ ดู theinformation ในส่วน "Page_Error" สำหรับรายละเอียดเพิ่มเติม
  3. จากเมนูแฟ้มคลิกบันทึก AppEvent.aspx
  4. เพิ่มตัวจัดการเหตุการณ์Application_Errorไปยังแฟ้ม Global.asax การพิมพ์ทับข้อผิดพลาด youthrow ที่อยู่ในตัวจัดการเหตุการณ์Page_Loadของเพ AppEvent.aspx โปรดสังเกตว่า คุณต้องการให้รายงานใช้addanother สำหรับ namespace System.Diagnosticsถึง Global.asax เมื่อต้องการใช้บันทึกเหตุการณ์

    เพิ่มรหัส thefollowing ไปยังแฟ้ม Global.asax:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString()+ 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	Server.ClearError();
    	//additional actions...
    } 
    					
  5. บันทึกแฟ้ม Global.asax
  6. ใน Visual Studio .NET บนเมนูสร้างคลิกสร้าง
  7. คลิกขวาเพจ และจากนั้น คลิกมุมมองในเบราว์เซอร์ ในกรณีนี้ หน้าจะว่างเปล่า อย่างไรก็ตาม คุณควรมีการเพิ่มรายการใหม่ในแฟ้มบันทึกเหตุการณ์ของ noticethat ตัวอย่างนี้ทำให้รายการในบันทึกของโปรแกรมประยุกต์ ซึ่งสามารถเข้าถึงได้จาก'ตัวแสดงเหตุการณ์' คุณอาจต้องการเปลี่ยนเส้นทางผู้ใช้ไปอีกเพจหนึ่ง friendlyerror ผู้ใช้เพิ่มเติม หรือดำเนินการกระทำบางอย่างเพิ่มเติมถ้าจำเป็นหลังจากข้อผิดพลาด loggingthe

วิธีการใช้แฟ้ม Web.config

ถ้าคุณไม่ต้องโทรServer.ClearErrorหรือพิมพ์ทับข้อผิดพลาดในการPage_Errorหรือตัวจัดการเหตุการณ์Application_Errorข้อผิดพลาดถูกจัดการ โดยยึดตามการตั้งค่าในส่วนของ<customErrors>ของแฟ้ม Web.config ในส่วนของ<customErrors>คุณสามารถระบุเพจที่เปลี่ยนเส้นทางเป็นค่าเริ่มต้นข้อผิดพลาดของเพจ (defaultRedirect) หรือระบุไปหน้าเฉพาะที่ขึ้นอยู่กับรหัสข้อผิดพลาด HTTP ที่ถูกยกกำลัง คุณสามารถใช้วิธีนี้ข้อความแสดงข้อผิดพลาดที่ผู้ใช้ได้รับการกำหนดเอง

เกิดข้อผิดพลาดที่ไม่ถูกโจมตีที่ใด ๆ ของระดับก่อนหน้านี้ในโปรแกรมประยุกต์ของคุณ เพจแบบกำหนดเองนี้จะแสดงขึ้น ส่วนนี้อธิบายวิธีการปรับเปลี่ยนแฟ้ม Global.asax ที่เรียกว่าServer.ClearErrorไม่ ผลที่ได้ ข้อผิดพลาดถูกจัดการในแฟ้ม Web.config เป็นจุดสุดท้ายเมื่อต้องการพิมพ์ทับข้อผิดพลาด </customErrors></customErrors>
  1. เปิดแฟ้ม Global.asax จาก previousexample
  2. ข้อคิดเห็นออกบรรทัดServer.ClearErrorเพื่อให้แน่ใจว่าพื้นผิวข้อผิดพลาดในการ Web.configfile
  3. บันทึกการเปลี่ยนแปลงกับ Global.asax รหัสของคุณควร nowappear ที่คล้ายกับต่อไปนี้:
    using System.Diagnostics;
    
    protected void Application_Error(object sender, EventArgs e)
    {
    	Exception objErr = Server.GetLastError().GetBaseException();
    	string err =	"Error Caught in Application_Error event\n" +
    			"Error in: " + Request.Url.ToString() +
    			"\nError Message:" + objErr.Message.ToString() + 
    			"\nStack Trace:" + objErr.StackTrace.ToString();
    	EventLog.WriteEntry("Sample_WebApp",err,EventLogEntryType.Error);
    	//Server.ClearError();
    	//additional actions...
    } 
    					
  4. เพิ่มรหัสต่อไปนี้ไปยัง<customErrors>sectionto เปลี่ยนเส้นทางผู้ใช้ไปยังเพจที่กำหนดเอง:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    หมายเหตุ คุณต้องปรับเปลี่ยนเส้นทางแฟ้มในแอตทริบิวต์defaultRedirectเพื่อให้อ้างอิงถึงชื่อของ andapplication เซิร์ฟเวอร์เว็บเกี่ยวข้อง
  5. เนื่องจากข้อผิดพลาดที่ถูกโจมตีในระดับนี้เป็นข้อผิดพลาดเริ่มต้นเพ sentto คุณต้องสร้างเพจที่มีข้อผิดพลาดที่มีชื่อว่า ErrorStatus.htm.Keep จำไว้ว่าคุณใช้วิธีนี้ในการควบคุมสิ่งที่จะแสดงเป็น theuser ดังตัวอย่างนี้ใช้ในเพจที่.htm สำหรับหน้าข้อผิดพลาด เพิ่ม followingcode: ErrorStatus.htm
    <HTML>
    <HEAD>
    <TITLE></TITLE>
    <META NAME="GENERATOR" Content="Microsoft Visual Studio 7.0">
    </HEAD>
    <BODY>
         <b>Custom Error page!</b>
         <br>
         You have been redirected here from the <customErrors> section of the 
         Web.config file.
    </BODY>
    </HTML>
    					
  6. เมื่อต้องการทดสอบรหัส บันทึกแฟ้ม สร้างโครงการ andthen ดู AppEvent.aspx ในเบราว์เซอร์ โปรดสังเกตว่า เมื่อข้อผิดพลาดจะเกิดขึ้น คุณจะเปลี่ยนเส้นทางไปยังเพ ErrorStatus.htm
ถึงแม้ว่าคุณสามารถอ้างอิงหน้าเริ่มต้นข้อผิดพลาดในค่าของแอตทริบิวต์defaultRedirectในส่วนของ<customErrors>คุณยังสามารถระบุเพื่อเปลี่ยนเส้นทางโดยยึดตามรหัสข้อผิดพลาด HTTP ที่ถูกยกกำลังบางเพจ องค์ประกอบลูก<error>สำหรับตัวเลือกนี้ได้ ตัวอย่าง:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
หมายเหตุ เพจที่ระบุไว้ในdefaultRedirectของส่วน<customErrors>คือ แฟ้ม.htm ฉัน

โปรดสังเกตว่า ส่วน<customErrors>มีแอตทริบิวต์ที่โหมดที่ถูกตั้งค่าเป็นเปิด แอตทริบิวต์ของโหมดจะใช้เพื่อควบคุมวิธีการเปลี่ยนเส้นทางข้อผิดพลาดเกิดขึ้น ตัวอย่างเช่น ถ้าคุณกำลังพัฒนาโปรแกรมประยุกต์ คุณมักต้องการดูข้อความแสดงข้อผิดพลาด ASP.NET จริง และไม่ต้องการจะเปลี่ยนเส้นทางไปยังหน้าข้อผิดพลาดที่ใช้งานง่ายขึ้น แอตทริบิวต์ของโหมดที่มีการตั้งค่าต่อไปนี้: </customErrors></customErrors>
  • บน: ข้อยกเว้นที่ไม่สามารถจัดการได้เปลี่ยนเส้นทางผู้ใช้ไปยังเพdefaultRedirectที่ระบุ โหมดนี้ถูกใช้เป็นหลักในการผลิต
  • ปิด: ผู้ใช้ที่ได้รับรายละเอียดข้อยกเว้น และจะไม่ redirectedto เพdefaultRedirect โหมดนี้ถูกใช้เป็นหลักในการพัฒนา
  • RemoteOnly: เฉพาะผู้ใช้ที่เข้าถึงไซต์บนเครื่องคอมพิวเตอร์ (usinglocalhost) ได้รับรายละเอียดข้อยกเว้น ผู้ใช้อื่น ๆ ทั้งหมดจะถูกเปลี่ยนเส้นทางไปยังเพdefaultRedirect โหมดนี้ถูกใช้เป็นหลักสำหรับการดีบัก

การแก้ไขปัญหา

ในการเริ่มต้นติด บน Microsoft Windows 2000 และ ใน Microsoft Windows XP, ASP.NET เรียกใช้เว็บแอพลิเคชันรหัสในกระบวนการของผู้ปฏิบัติงาน ข้อมูลเฉพาะตัวของขั้นตอนนี้เป็นค่าเริ่มต้นเรียกว่าบัญชี ASPNET บัญชีท้องถิ่น unprivileged ในรุ่นเบต้าของ ASP.NET การประมวลผลลักษณะถูกระบบ บัญชีผู้ดูแลมีประสิทธิภาพกับสิทธิ์การใช้งานมากมายบนเครื่อง

ในการติดตั้งค่าเริ่มต้นบน Windows Server 2003 (IIS 6), ASP.NET เรียกใช้เว็บแอพลิเคชันรหัสในกระบวนการของผู้ปฏิบัติงาน ข้อมูลเฉพาะตัวของขั้นตอนนี้เป็นค่าเริ่มต้นเรียกว่า NetworkService แอคเคาท์ limited

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงนี้และวิธีนั้นสามารถมีผลใช้งานรหัสในบทความนี้ และรหัสอื่น ๆ ที่อาจต้องการสิทธิการเข้าถึงเพิ่มเติม โปรดเยี่ยมชมเว็บไซต์ต่อไปนี้:
เวอร์ชั่น 1 เปลี่ยนความปลอดภัยสำหรับ Microsoft .NET Framework
http://msdn2.microsoft.com/en-us/library/ms994923.aspx

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติม โปรดเยี่ยมชมเว็บไซต์ต่อไปนี้ของ Microsoft:
การจัดการข้อยกเว้นใน.NET

วิธีการ HttpServerUtility.ClearError

ศูนย์พัฒนา.NET MSDN

โฮมเพจของ Microsoft .NET

คุณสมบัติ

หมายเลขบทความ (Article ID): 306355 - รีวิวครั้งสุดท้าย: 29 ตุลาคม 2556 - Revision: 6.0
ใช้กับ
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Keywords: 
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:306355

ให้ข้อเสนอแนะ

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com