Làm thế nào để tạo ra tùy chỉnh lỗi báo cáo trang trong ASP.NET bằng cách sử dụng Visual C# .NET

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch thuật của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa lại thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung cấp các bài viết được cả biên dịch viên và phần mềm dịch thuật thực hiện và cộng đồng chỉnh sửa lại để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng nhiều ngôn ngữ Tuy nhiên, bài viết do máy dịch hoặc thậm chí cộng đồng chỉnh sửa sau không phải lúc nào cũng hoàn hảo. Các bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 306355
Một phiên bản Microsoft Visual Basic.net của bài viết này, xin xem 308132.

Bài viết này đề cập đến không gian tên Microsoft Khuôn khổ .NET lớp thư viện sau đây:
  • System.Diagnostics

TRONG NHIỆM VỤ NÀY

Tóm tắt
Bài viết này mô tả làm thế nào để sử dụng Visual C# .NET mã bẫy và đáp ứng với lỗi khi chúng xảy ra trong ASP.NET. ASP.NET đã cải thiện lỗi xử lý tùy chọn từ truyền thống Microsoft Active Server trang (ASP). Trong ASP.NET, bạn có thể xử lý lỗi lúc nhiều tầng lớp khác nhau trong các ứng dụng của bạn.

Các tính năng mới trong ASP.NET

ASP.NET cung cấp một số tiến bộ trong làm thế nào bạn có thể xử lý và đáp ứng với lỗi. Trong truyền thống ASP, bạn xử lý lỗi với "On Error Resume Next" (hoặc cố gắng nắm bắt khối trong JScript). Cách khác, nếu bạn đang chạy Microsoft Internet Information Services (IIS) 5.0, bạn sử dụng các đối tượng ASPError để tạo ra một trang báo cáo tùy chỉnh lỗi. Tuy nhiên, các phương pháp tiếp cận có giới hạn của họ.

ASP.NET cung cấp nhiều cấp độ mà tại đó bạn có thể xử lý và đáp ứng với lỗi có thể xảy ra khi bạn chạy một ứng dụng ASP.NET. ASP.NET cung cấp ba phương pháp chính cho phép bạn để bẫy và đáp ứng với lỗi khi chúng xảy ra: Page_Error, Application_Error, và tập tin cấu hình ứng dụng (Web.config).

Bài viết này chứng tỏ làm thế nào để sử dụng các tính năng mới trong ứng dụng ASP.NET của bạn. Mặc dù bài viết này mô tả làm thế nào để cung cấp các trang lỗi tùy chỉnh và báo cáo lỗi chung vì nó liên quan trực tiếp đến ASP.NET, bài viết này không mô tả lỗi xử lý phương pháp tiếp cận như thử-bắt-cùng khối và hệ thống trường hợp ngoại lệ ngôn ngữ chung thời gian chạy (CLR).

Làm thế nào để sử dụng phương pháp Page_Error

Bộ xử lí biến cố Page_Error cung cấp một cách để bẫy lỗi xảy ra ở cấp trang. Bạn có thể chỉ đơn giản là hiển thị lỗi thông tin (như các mẫu mã để làm theo nào), hoặc bạn có thể đăng sự kiện này hoặc thực hiện một số hành động khác.

Lưu ý Ví dụ này sẽ hiển thị thông tin chi tiết lỗi trong trình duyệt chỉ cho mục đích cuộc biểu tình. Bạn sẽ muốn được thận trọng khi hiển thị thông tin chi tiết cho người dùng của các ứng dụng, đặc biệt là khi các ứng dụng đang chạy trên Internet. Một hành động thích hợp hơn sẽ là hiển thị một thông báo cho người dùng thông báo cho họ rằng một lỗi đã xảy ra, và sau đó thực sự đăng các chi tiết lỗi cụ thể trong trường hợp kí nhập.

Ví dụ này ném một ngoại lệ null, lực lượng lỗi xảy ra trong các Page_Load sự kiện xử lý. Thực hiện theo các bước sau để tạo ra trang ban đầu sẽ chứng minh bằng cách sử dụng bộ Bộ xử lí biến cố Page_Error .
  1. Thực hiện theo các bước sau để thêm một tập tin mới đặt tên PageEvent.aspxto dự án của bạn:
    1. Mở Microsoft Visual Studio net.
    2. Trong giải pháp Explorer, bấm chuột phải vào nút chọn một dự án, chỉ để Thêm, và sau đó nhấp vào Thêm mẫu Web.
    3. Trong hộp văn bản tên , hãy nhập PageEvent.aspx, và sau đó nhấp vào mở.
  2. Thêm mã sau đây để 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> 					

    Lưu ý Trong mẫu mã này, các thuộc tính AutoEventWireup không rõ ràng đặt. Nếu bạn không rõ ràng làm assigna giá trị cho các thuộc tính AutoEventWireup , mặc định giá trị thực sự được sử dụng. Nếu bạn đang sử dụng Visual Studio net để phát triển yourapplications, mẫu Web mẫu mã một cách rõ ràng đặt ra các giá trị thuộc tính AutoEventWireup để sai. Có một sự khác biệt quan trọng giữa sử dụng thatASP.NET giá trị mặc định, và mặc định giá trị mà Visual Studio .NET codeassigns mẫu để thuộc tính này. Nếu giá trị thuộc tính AutoEventWireup được thiết lập để sai, Bộ xử lí biến cố được tuyên bố trong các.ASPX trang làm notfire. Điều này có thể gây nhầm lẫn nếu bạn không biết về thisfunctionality.
  3. Từ trình đơn tệp , bấm vào Lưu PageEvent.aspx.
  4. Bấm chuột phải vào trang, và sau đó nhấp vào chế độ xem trong trình duyệt để chạy trang. Thông báo lỗi được ném và reportedaccording với các đặc điểm mã.
Lưu ý Bạn có thể nhận thấy rằng mã vấn đề một cuộc gọi đến Server.ClearError. Điều này ngăn chặn lỗi từ tiếp tục Bộ xử lí biến cố Application_Error .

Ngoài ra, bạn cũng nên lưu ý của các thuộc tính Inherits trong chỉ thị @ Trang . Nếu Inherits được thiết lập, bạn phải xây dựng dự án trước khi bạn duyệt đến trang. Nếu bạn không xây dựng các dự án đầu tiên, bạn nhận được thông báo lỗi sau:
'Project.PageEvent' không phải là một loại hợp lệ

Làm thế nào để sử dụng phương pháp Application_Error

Tương tự như bộ Bộ xử lí biến cố Page_Error , bạn có thể sử dụng bộ Bộ xử lí biến cố Application_Error để bẫy lỗi xảy ra trong ứng dụng của bạn. Do các phạm vi ứng dụng rộng của sự kiện, bạn có thể kí nhập ứng dụng lỗi thông tin hoặc xử lý các lỗi ứng dụng cấp khác có thể xảy ra.

Mẫu để làm theo dựa trên mẫu mã trước Page_Error và sẽ bị sa thải nếu lỗi trong Page_Load không bị mắc kẹt trong Bộ xử lí biến cố Page_Error . Bộ xử lí biến cố Application_Error được chỉ định trong file Global.asax của ứng dụng của bạn. Để đơn giản, các bước trong phần này tạo ra một trang mới trong đó để ném một ngoại lệ, bẫy lỗi trong Bộ xử lí biến cố Application_Error của tập tin Global.asax và viết lỗi cho sổ ghi sự kiện. Các bước sau đây chứng minh làm thế nào để sử dụng phương pháp Application_Error :
  1. Thêm một tập tin mới có tên AppEvent.aspx để yourproject.
  2. Thêm mã sau đây để AppEvent.aspx:
    <script language=C# runat="server">	void Page_Load(object sender, System.EventArgs e)	{		throw(new ArgumentNullException());	}</script>					

    Lưu ý Các thông tin thảo luận trong phần "Page_Error" về các thuộc tính AutoEventWireup cũng áp dụng cho các mẫu mã trong bước này. Xem theinformation trong phần "Page_Error" cho biết thêm chi tiết.
  3. Từ trình đơn tệp , bấm vào Lưu AppEvent.aspx.
  4. Thêm Bộ xử lí biến cố Application_Error vào tập tin Global.asax để bẫy lỗi đó youthrow trong Page_Load sự kiện xử lý của trang AppEvent.aspx. Chú ý rằng bạn phải tuyên bố bằng cách sử dụng addanother cho không gian tên System.Diagnostics để Global.asax sử dụng sổ ghi sự kiện.

    Thêm thefollowing mã để các tập tin 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. Lưu các tập tin Global.asax.
  6. Trong Visual Studio .NET, trên các xây dựng trình đơn, nhấp vào xây dựng.
  7. Bấm chuột phải vào trang, và sau đó bấm xem trong trình duyệt. Trong trường hợp này trang sẽ được để trống, Tuy nhiên, bạn nên noticethat một mục nhập mới đã được thêm vào trong sổ ghi sự kiện. Mẫu này làm cho một mục nhập Nhật ký ứng dụng, có thể truy cập từ bộ Trình xem sự kiện. Sau khi loggingthe lỗi, bạn có thể muốn chuyển hướng người dùng đến một thêm người dùng-friendlyerror trang, hoặc thực hiện một số Hành động bổ sung nếu cần thiết.

Làm thế nào để sử dụng tập tin Web.config

Nếu bạn không gọi Server.ClearError hoặc cái bẫy lỗi trong Page_Error hoặc Application_Error sự kiện xử lý, lỗi được xử lý dựa trên các thiết lập trong phần <customErrors>của tập tin Web.config. Trong phần <customErrors>, bạn có thể chỉ định một trang chuyển hướng như là một trang lỗi mặc định (defaultRedirect) hoặc chỉ định vào một trang cụ thể dựa trên mã lỗi HTTP được nêu ra. Bạn có thể sử dụng phương pháp này để tuỳ chỉnh thông báo lỗi rằng người dùng nhận được.

Nếu một lỗi xảy ra mà không bị mắc kẹt tại bất kỳ mức độ trước đó trong ứng dụng của bạn, Trang này tùy chỉnh được hiển thị. Phần này chứng tỏ làm thế nào để sửa đổi các tập tin Global.asax để Server.ClearError không bao giờ được gọi là. Kết quả là, lỗi được xử lý trong Web.config file như là điểm cuối cùng để bẫy lỗi. </customErrors></customErrors>
  1. Mở tập tin Global.asax từ previousexample.
  2. Bình luận ra dòng Server.ClearError để đảm bảo rằng các bề mặt lỗi trong Web.configfile.
  3. Lưu các thay đổi của bạn để Global.asax. Mã của bạn nên nowappear tương tự như sau đây:
    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. Thêm mã sau đây để các <customErrors>sectionto chuyển hướng người dùng đến một trang tùy chỉnh:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"></customErrors>						
    Lưu ý Bạn phải thay đổi đường dẫn tập tin trong defaultRedirect thuộc tính để rằng nó tham chiếu tên Web máy chủ andapplication có liên quan.
  5. Bởi vì các lỗi đang bị mắc kẹt ở cấp độ này là sentto một lỗi web site mặc định, bạn phải tạo một trang lỗi đặt tên là ErrorStatus.htm.Keep trong tâm trí bạn đang sử dụng phương pháp này để kiểm soát những gì được trình bày cho theuser, do đó, ví dụ này sử dụng một trang .htm cho trang lỗi. Địa chỉ 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. Để kiểm tra mã, löu caùc taäp tin, xây dựng dự án, andthen xem AppEvent.aspx trong trình duyệt. Nhận thấy rằng khi lỗi được ném, bạn được chuyển hướng đến trang ErrorStatus.htm.
Mặc dù bạn có thể tham khảo một trang lỗi mặc định giá trị của thuộc tính defaultRedirect trong phần <customErrors>, bạn cũng có thể chỉ định một trang cụ thể chuyển hướng dựa trên mã lỗi HTTP được nêu ra. phần tử con <error>cho phép tùy chọn này. Ví dụ:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">	<error statusCode="404" redirect="filenotfound.htm" /></customErrors>				
Lưu ý Trang được chỉ định trong defaultRedirect của phần <customErrors>là một tập tin .htm. TÔI

Thông báo rằng phần <customErrors>bao gồm một thuộc tính chế độ được thiết lập để vào. Chế độ tính được sử dụng để kiểm soát cách chuyển hướng lỗi xảy ra. Ví dụ, nếu bạn đang phát triển các ứng dụng, bạn rất có thể muốn xem thông báo thực tế lỗi ASP.NET và không muốn được chuyển hướng đến trang lỗi thân thiện hơn. Các thuộc tính chế độ bao gồm các cài đặt chuyên biệt sau đây: </customErrors></customErrors>
  • Ngày: trường hợp ngoại lệ không được chuyển hướng người dùng đến trang được chỉ định defaultRedirect . Chế độ này được sử dụng chủ yếu trong sản xuất.
  • Off: người dùng nhận được thông tin ngoại lệ và là không redirectedto trang defaultRedirect . Chế độ này được sử dụng chủ yếu là trong phát triển.
  • RemoteOnly: chỉ người sử dụng truy cập vào các web site trên máy tính cục bộ (bởi usinglocalhost) nhận được thông tin ngoại lệ. Tất cả các người dùng khác được chuyển hướng đến trang defaultRedirect . Chế độ này được sử dụng chủ yếu để gỡ lỗi.

Giải đáp thắc mắc

Trong cài đặt chuyên biệt mặc định trên Microsoft Windows 2000 và trên Microsoft Windows XP, ASP.NET chạy Web ứng dụng mã trong một quá trình công nhân. Danh tính của quá trình này mặc định một tài khoản không có đặc quyền địa phương được gọi là tài khoản ASPNET. Trong bản phát hành phiên bản bê-ta của ASP.NET, danh tính của quá trình là hệ thống, một tài khoản quản trị viên mạnh mẽ với nhiều quyền trên máy.

Trong cài đặt chuyên biệt mặc định của nó trên Windows Server 2003 (IIS 6), ASP.NET chạy Web ứng dụng mã trong một quá trình công nhân. Danh tính của quá trình này mặc định một tài khoản giới hạn được gọi là NetworkService.

Để biết thêm chi tiết về sự thay đổi này và làm thế nào nó có thể có hiệu lực chạy mã trong bài viết này, và mã khác có thể cần quyền truy cập bổ sung, ghé thăm Web site sau:
Phiên bản 1 bảo mật thay đổi cho Microsoft Khuôn khổ .NET
http://msdn2.Microsoft.com/en-US/Library/ms994923.aspx
cố gắng bắt cuối cùng cái bẫy lỗi

Thuộc tính

ID Bài viết: 306355 - Xem lại Lần cuối: 10/29/2013 02:29:00 - Bản sửa đổi: 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

  • kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtvi
Phản hồi