Cara membuat pelaporan kesalahan kustom halaman dalam ASP.NET dengan menggunakan Visual C#.NET

ID Artikel: 306355 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menjelaskan cara menggunakan Visual C#.NET kode untuk perangkap dan menanggapi kesalahan ketika mereka terjadi pada ASP.NET. ASP.NET telah membaik Kesalahan penanganan pilihan dari tradisional Microsoft Active Server Pages (ASP). Dalam ASP.NET, Anda dapat menangani kesalahan pada beberapa tingkat yang berbeda dalam Anda aplikasi.

Fitur baru dalam ASP.NET

ASP.NET menawarkan beberapa kemajuan dalam cara Anda dapat menangani dan menanggapi kesalahan. Tradisional ASP, Anda menangani kesalahan dengan "On Error Resume Next" (atau mencoba menangkap blok pada JScript). Secara bergantian, jika Anda menjalankan Microsoft Layanan Informasi Internet (IIS) 5.0, Anda menggunakan ASPError objek untuk membuat pelaporan halaman kesalahan kustom. Namun, ini pendekatan memiliki keterbatasan mereka.

ASP.NET menyediakan beberapa tingkatan pada yang Anda dapat menangani dan menanggapi kesalahan yang mungkin terjadi ketika Anda menjalankan ASP.NET aplikasi. ASP.NET menyediakan tiga metode utama yang memungkinkan Anda untuk menjebak dan menanggapi kesalahan ketika mereka terjadi: Page_Error, Application_Error, dan file konfigurasi aplikasi (Web.config).

Artikel ini menunjukkan cara menggunakan fitur baru ini dalam ASP Anda.NET aplikasi. Meskipun artikel ini menjelaskan bagaimana memberikan halaman kesalahan kustom dan pelaporan kesalahan umum yang berhubungan langsung dengan ASP.NET, artikel ini tidak menggambarkan pendekatan seperti mencoba-menangkap-akhirnya blok dan Common Language Runtime (CLR) pengecualian penanganan kesalahan lain sistem.

Cara menggunakan metode Page_Error

Page_Error Pengangan kejadian menyediakan cara untuk perangkap kesalahan yang terjadi pada Halaman tingkat. Anda hanya dapat menampilkan informasi kesalahan (sebagai contoh kode untuk Ikuti Apakah), atau Anda dapat log peristiwa atau melakukan beberapa tindakan lainnya.

Catatan Contoh ini menampilkan informasi kesalahan rinci dalam browser hanya untuk keperluan demonstrasi. Anda akan ingin untuk berhati-hati ketika menampilkan rinci informasi kepada pengguna akhir aplikasi, terutama ketika aplikasi berjalan di Internet. Tindakan yang lebih tepat akan menampilkan pesan kepada pengguna yang memberitahu mereka bahwa sebuah kesalahan telah terjadi, dan kemudian benar-benar log kesalahan tertentu rincian dalam acara log.

Contoh ini throws Pengecualian null, yang memaksa kesalahan terjadi di Page_Load Pengangan kejadian. Ikuti langkah-langkah ini untuk membuat awal halaman yang akan menunjukkan menggunakan Page_Error Pengangan kejadian.
  1. Ikuti langkah-langkah ini untuk menambah sebuah berkas baru yang bernama PageEvent.aspx untuk proyek Anda:
    1. Buka Microsoft Visual Studio.NET.
    2. Dalam solusi Explorer, klik kanan-atas node proyek, Arahkan ke Add, dan kemudian klik Tambahkan formulir Web.
    3. Di kotak teks nama , ketik PageEvent.aspx, dan kemudian Klik Buka.
  2. Tambahkan kode berikut ke 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> 
    					

    Catatan Dalam contoh kode ini, atribut AutoEventWireup tidak secara eksplisit diatur. Jika Anda tidak secara eksplisit menetapkan nilai atribut AutoEventWireup , default nilai benar digunakan. Jika Anda menggunakan Visual Studio.NET untuk mengembangkan Anda aplikasi, kode template formulir Web secara eksplisit menetapkan nilai atribut AutoEventWireup untuk palsu. Ada perbedaan penting antara default nilai yang ASP.NET menggunakan, dan default nilai yang Visual Studio.Kode bersih template menetapkan atribut ini. Jika nilai atribut AutoEventWireup diatur ke false, Pengangan kejadian yang dinyatakan dalam.Halaman ASPX tidak api. Hal ini dapat membingungkan jika Anda tidak tahu tentang hal ini fungsi.
  3. Dari File menu, klik Simpan PageEvent.aspx.
  4. Klik kanan-atas halaman, dan kemudian klik Lihat dalam Browser untuk menjalankan halaman. Perhatikan bahwa kesalahan dilemparkan dan melaporkan Menurut spesifikasi kode.
Catatan Anda mungkin menyadari bahwa kode masalah panggilan untuk Server.ClearError. Ini mencegah kesalahan terus Application_Error Pengangan kejadian.

Selain itu, Anda juga harus mengambil catatan Inherits atribut di direktif @ Page . Jika Inherits diatur, Anda harus membangun proyek sebelum Anda telusuri paling detail halaman. Jika Anda tidak membangun proyek pertama, Anda akan menerima pesan galat berikut ini:
'Project.PageEvent' adalah tidak sah

Cara menggunakan metode Application_Error

Serupa dengan Page_Error Pengangan kejadian, Anda dapat menggunakan Application_Error Pengangan kejadian untuk menjebak kesalahan yang terjadi dalam aplikasi Anda. Karena untuk acara aplikasi-lebar lingkup, Anda dapat log kesalahan aplikasi informasi atau menangani kesalahan level aplikasi lain yang mungkin terjadi.

Sampel untuk mengikuti didasarkan pada sampel kode Page_Error sebelumnya dan akan dipecat jika kesalahan dalam Page_Load tidak terjebak dalam Page_Error Pengangan kejadian. Application_Error Pengangan kejadian ditentukan di Global.asax file Anda aplikasi. Untuk mempermudah, langkah-langkah di bagian ini membuat sebuah halaman baru di mana untuk membuang pengecualian, perangkap kesalahan dalam Application_Error Pengangan kejadian file Global.asax, dan menulis untuk kesalahan log peristiwa. Langkah-langkah berikut menunjukkan cara menggunakan Application_Error metode:
  1. Menambah sebuah berkas baru yang bernama AppEvent.aspx untuk Anda proyek.
  2. Tambahkan kode berikut ke AppEvent.aspx:
    <script language=C# runat="server">
    	void Page_Load(object sender, System.EventArgs e)
    	{
    		throw(new ArgumentNullException());
    	}
    </script>
    					

    Catatan Informasi yang dibahas dalam bagian "Page_Error" tentang atribut AutoEventWireup juga berlaku untuk contoh kode dalam langkah ini. Lihat informasi di bagian "Page_Error" untuk lebih jelasnya.
  3. Dari File menu, klik Simpan AppEvent.aspx.
  4. Tambahkan Application_Error Pengangan kejadian untuk berkas Global.asax untuk menjebak kesalahan yang Anda melempar Page_Load Pengangan kejadian halaman AppEvent.aspx. Pemberitahuan bahwa Anda harus menambahkan menggunakan pernyataan lain untuk namespace System.Diagnostics untuk Global.asax untuk menggunakan log peristiwa.

    Tambahkan kode berikut untuk berkas 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. Simpan Global.asax file.
  6. Dalam Visual Studio.NET, dalam membangun menu, klik membangun.
  7. Klik kanan-atas halaman, dan kemudian klik Lihat dalam Browser. Dalam kasus ini halaman akan kosong, namun, Anda harus melihat bahwa entri baru telah ditambahkan dalam acara log. Sampel ini membuat entri di log aplikasi, yang dapat diakses dari Pemantau Peristiwa. Setelah log in kesalahan yang Anda mungkin ingin untuk mengarahkan ulang pengguna lain yang lebih ramah-pengguna kesalahan halaman, atau melakukan tindakan beberapa tambahan jika diperlukan.

Cara menggunakan berkas Web.config

Jika Anda tidak menelepon Server.ClearError atau perangkap kesalahan pada Page_Error atau Application_Error Pengangan kejadian, kesalahan ditangani berdasarkan pengaturan <customErrors>bagian dari berkas Web.config. Dalam <customErrors>bagian, Anda dapat menentukan halaman redirect sebagai default kesalahan halaman (defaultRedirect) atau menentukan untuk halaman tertentu berdasarkan kode galat HTTP yang dibesarkan. Anda dapat menggunakan metode ini untuk menyesuaikan kesalahan pesan yang pengguna menerima.

Jika terjadi kesalahan yang tidak terjebak pada setiap tingkat sebelumnya dalam aplikasi Anda, halaman kustom ini akan ditampilkan. Ini bagian menunjukkan bagaimana memodifikasi Global.asax file sehingga Server.ClearError tidak pernah menelepon. Sebagai akibatnya, kesalahan ditangani di File web.config sebagai titik terakhir untuk menjebak kesalahan. </customErrors></customErrors>
  1. Buka Global.asax file dari sebelumnya contoh.
  2. Komentar Server.ClearError baris untuk memastikan bahwa permukaan kesalahan dalam Web.config file.
  3. Simpan perubahan Anda ke Global.asax. Kode Anda harus sekarang muncul mirip dengan berikut ini:
    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. Tambahkan kode berikut ke bagian <customErrors> untuk mengarahkan ulang pengguna ke halaman kustom:<b00> </b00> </customErrors>
    <customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
    </customErrors>
    						
    Catatan Anda harus memodifikasi path file dalam defaultRedirect atribut sehingga referensi yang relevan server Web dan nama aplikasi.
  5. Karena galat yang terperangkap pada tingkat ini dikirim ke halaman kesalahan default, Anda harus membuat sebuah halaman kesalahan yang bernama ErrorStatus.htm. Perlu diingat bahwa Anda menggunakan metode ini untuk mengontrol apa yang disajikan kepada pengguna, jadi contoh ini menggunakan .htm halaman untuk halaman kesalahan. Tambahkan berikut kode untuk 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. Untuk menguji kode, menyimpan file, membangun proyek, dan kemudian melihat AppEvent.aspx di browser. Perhatikan bahwa ketika kesalahan dilemparkan, Anda akan diarahkan ke halaman ErrorStatus.htm.
Meskipun Anda dapat referensi halaman kesalahan default nilai atribut defaultRedirect di bagian <customErrors>, Anda juga dapat Tentukan halaman tertentu untuk mengarahkan berdasarkan kode galat HTTP yang mengangkat. elemen anak <error>yang memungkinkan untuk pilihan ini. Sebagai contoh:<b00> </b00> </error> </customErrors>
<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On">
	<error statusCode="404" redirect="filenotfound.htm" />
</customErrors>
				
Catatan Halaman yang ditetapkan dalam defaultRedirect bagian <customErrors>adalah .htm file. SAYA

Perhatikan bahwa bagian <customErrors>berisi atribut modus yang diatur pada. Atribut modus digunakan untuk mengontrol bagaimana pengalihan kesalahan terjadi. Sebagai contoh, jika Anda sedang mengembangkan aplikasi, kemungkinan besar Anda ingin melihat ASP sebenarnya.NET pesan kesalahan dan tidak ingin diarahkan ke yang lebih Halaman kesalahan ramah-pengguna. Atribut modus termasuk pengaturan berikut: </customErrors></customErrors>
  • Pada: Unhandled pengecualian mengarahkan ulang pengguna ke halaman tertentu defaultRedirect . Mode ini digunakan terutama dalam produksi.
  • Off: pengguna menerima informasi pengecualian dan tidak Dialihkan ke halaman defaultRedirect . Mode ini digunakan terutama dalam pengembangan.
  • RemoteOnly: hanya pengguna yang mengakses situs pada komputer lokal (dengan menggunakan localhost) menerima informasi pengecualian. Semua pengguna lain akan diarahkan ke defaultRedirect halaman. Mode ini digunakan terutama untuk debugging.

Pemecahan masalah

Dalam instalasi standar pada Microsoft Windows 2000 dan di Microsoft Windows XP, ASP.NET menjalankan kode aplikasi web dalam proses pekerja. Identitas proses ini default ke unprivileged account lokal disebut ASPNET account. Dalam rilis beta dari ASP.NET, identitas proses itu Sistem, account administratif kuat dengan privileges yang banyak pada mesin.

Dalam instalasi standar pada Windows Server 2003 (IIS 6), ASP.NET menjalankan kode aplikasi web dalam proses pekerja. Identitas proses ini default ke rekening terbatas disebut NetworkService.

Untuk informasi lebih informasi tentang perubahan ini dan bagaimana hal itu dapat mempengaruhi menjalankan kode ini Artikel, dan kode lainnya yang lain yang mungkin perlu hak akses tambahan, kunjungi situs-situs Web berikut:
Versi 1 Perubahan keamanan Microsoft.NET Framework
http://msdn2.Microsoft.com/en-us/library/ms994923.aspx

REFERENSI

Untuk informasi lebih lanjut, kunjungi Website Microsoft berikut situs:
Exception manajemen di.NET

HttpServerUtility.ClearError metode

MSDN.Pusat pengembangan NET

Microsoft.NET Beranda

Properti

ID Artikel: 306355 - Kajian Terakhir: 13 Juni 2012 - Revisi: 3.0
Berlaku bagi:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Kata kunci: 
kbconfig kbhowtomaster kbweb kbmt KB306355 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini: 306355

Berikan Masukan