Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
oleh Erik Reitan
Unduh Proyek Sampel Mainan Wingtip (C#) atau Unduh E-book (PDF)
Seri tutorial ini akan mengajari Anda dasar-dasar membangun aplikasi ASP.NET Web Forms menggunakan ASP.NET 4.5 dan Microsoft Visual Studio Express 2013 untuk Web. Proyek Visual Studio 2013 dengan kode sumber C# tersedia untuk menyertai seri tutorial ini.
Dalam tutorial ini, Anda akan memodifikasi aplikasi sampel Wingtip Toys untuk menyertakan penanganan kesalahan dan pencatatan kesalahan. Penanganan kesalahan akan memungkinkan aplikasi untuk menangani kesalahan dengan baik dan menampilkan pesan kesalahan yang sesuai. Pengelogan kesalahan akan memungkinkan Anda menemukan dan memperbaiki kesalahan yang telah terjadi. Tutorial ini dibangun pada tutorial sebelumnya "Perutean URL" dan merupakan bagian dari seri tutorial Wingtip Toys.
Yang akan Anda pelajari:
- Cara menambahkan penanganan kesalahan global ke konfigurasi aplikasi.
- Cara menambahkan penanganan kesalahan di tingkat aplikasi, halaman, dan kode.
- Cara mencatat kesalahan untuk ditinjau nanti.
- Cara menampilkan pesan kesalahan yang tidak membahayakan keamanan.
- Cara menerapkan pengelogan kesalahan Modul dan Penangan Pengelogan Kesalahan (ELMAH).
Gambaran Umum
ASP.NET aplikasi harus dapat menangani kesalahan yang terjadi selama eksekusi secara konsisten. ASP.NET menggunakan runtime bahasa umum (CLR), yang menyediakan cara memberi tahu aplikasi tentang kesalahan dengan cara yang seragam. Ketika terjadi kesalahan, pengecualian akan dilemparkan. Pengecualian adalah kesalahan, kondisi, atau perilaku tak terduga yang ditemui aplikasi.
Dalam .NET Framework, pengecualian adalah objek yang mewarisi dari System.Exception kelas . Pengecualian dilemparkan dari area kode tempat masalah terjadi. Pengecualian diteruskan tumpukan panggilan ke tempat di mana aplikasi menyediakan kode untuk menangani pengecualian. Jika aplikasi tidak menangani pengecualian, browser dipaksa untuk menampilkan detail kesalahan.
Sebagai praktik terbaik, tangani kesalahan di tingkat kode dalam blok dalam Try//CatchFinally kode Anda. Cobalah untuk menempatkan blok-blok ini sehingga pengguna dapat memperbaiki masalah dalam konteks di mana mereka terjadi. Jika blok penanganan kesalahan terlalu jauh dari tempat kesalahan terjadi, menjadi lebih sulit untuk memberi pengguna informasi yang mereka butuhkan untuk memperbaiki masalah.
Kelas Pengecualian
Kelas Pengecualian adalah kelas dasar tempat pengecualian diwariskan. Sebagian besar objek pengecualian adalah instans dari beberapa kelas turunan dari kelas Pengecualian, seperti SystemException kelas, IndexOutOfRangeException kelas , atau ArgumentNullException kelas . Kelas Pengecualian memiliki properti, seperti StackTrace properti, InnerException properti, dan Message properti , yang memberikan informasi spesifik tentang kesalahan yang telah terjadi.
Hierarki Pewarisan Pengecualian
Runtime memiliki serangkaian pengecualian dasar yang berasal dari SystemException kelas yang dilemparkan runtime ketika pengecualian ditemui. Sebagian besar kelas yang mewarisi dari kelas Pengecualian, seperti IndexOutOfRangeException kelas dan ArgumentNullException kelas , tidak menerapkan anggota tambahan. Oleh karena itu, informasi terpenting untuk pengecualian dapat ditemukan dalam hierarki pengecualian, nama pengecualian, dan informasi yang terkandung dalam pengecualian.
Hierarki Penanganan Pengecualian
Dalam aplikasi ASP.NET Web Forms, pengecualian dapat ditangani berdasarkan hierarki penanganan tertentu. Pengecualian dapat ditangani pada tingkat berikut:
- Tingkat aplikasi
- Tingkat halaman
- Tingkat kode
Ketika aplikasi menangani pengecualian, informasi tambahan tentang pengecualian yang diwarisi dari kelas Pengecualian sering dapat diambil dan ditampilkan kepada pengguna. Selain tingkat aplikasi, halaman, dan kode, Anda juga dapat menangani pengecualian di tingkat modul HTTP dan dengan menggunakan handler kustom IIS.
Penanganan Kesalahan Tingkat Aplikasi
Anda dapat menangani kesalahan default di tingkat aplikasi baik dengan memodifikasi konfigurasi aplikasi Anda atau dengan menambahkan Application_Error handler di file Global.asax aplikasi Anda.
Anda dapat menangani kesalahan default dan kesalahan HTTP dengan menambahkan customErrors bagian ke file Web.config . Bagian ini customErrors memungkinkan Anda menentukan halaman default yang akan dialihkan pengguna saat terjadi kesalahan. Ini juga memungkinkan Anda menentukan halaman individual untuk kesalahan kode status tertentu.
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="ErrorPage.aspx?handler=customErrors%20section%20-%20Web.config">
<error statusCode="404" redirect="ErrorPage.aspx?msg=404&handler=customErrors%20section%20-%20Web.config"/>
</customErrors>
</system.web>
</configuration>
Sayangnya, ketika Anda menggunakan konfigurasi untuk mengalihkan pengguna ke halaman lain, Anda tidak memiliki detail kesalahan yang terjadi.
Namun, Anda dapat menjebak kesalahan yang terjadi di mana saja di aplikasi Anda dengan menambahkan kode ke Application_Error handler dalam file Global.asax .
void Application_Error(object sender, EventArgs e)
{
Exception exc = Server.GetLastError();
if (exc is HttpUnhandledException)
{
// Pass the error on to the error page.
Server.Transfer("ErrorPage.aspx?handler=Application_Error%20-%20Global.asax", true);
}
}
Penanganan Peristiwa Kesalahan Tingkat Halaman
Handler tingkat halaman mengembalikan pengguna ke halaman tempat kesalahan terjadi, tetapi karena instans kontrol tidak dipertahankan, tidak akan ada lagi apa pun di halaman. Untuk memberikan detail kesalahan kepada pengguna aplikasi, Anda harus secara khusus menulis detail kesalahan ke halaman.
Anda biasanya akan menggunakan penangan kesalahan tingkat halaman untuk mencatat kesalahan yang tidak tertangani atau untuk membawa pengguna ke halaman yang dapat menampilkan informasi bermanfaat.
Contoh kode ini memperlihatkan handler untuk peristiwa Kesalahan di halaman web ASP.NET. Handler ini menangkap semua pengecualian yang belum ditangani dalam try/catch blok di halaman.
private void Page_Error(object sender, EventArgs e)
{
Exception exc = Server.GetLastError();
// Handle specific exception.
if (exc is HttpUnhandledException)
{
ErrorMsgTextBox.Text = "An error occurred on this page. Please verify your " +
"information to resolve the issue."
}
// Clear the error from the server.
Server.ClearError();
}
Setelah Anda menangani kesalahan, Anda harus menghapusnya dengan memanggil ClearError metode objek Server (HttpServerUtility kelas), jika tidak, Anda akan melihat kesalahan yang sebelumnya terjadi.
Penanganan Kesalahan Tingkat Kode
Pernyataan try-catch terdiri dari blok coba diikuti oleh satu atau beberapa klausa tangkapan, yang menentukan handler untuk pengecualian yang berbeda. Ketika pengecualian dilemparkan, runtime bahasa umum (CLR) mencari pernyataan tangkapan yang menangani pengecualian ini. Jika metode yang saat ini dijalankan tidak berisi blok tangkapan, CLR melihat metode yang disebut metode saat ini, dan seterusnya, meningkatkan tumpukan panggilan. Jika tidak ada blok tangkapan yang ditemukan, maka CLR menampilkan pesan pengecualian yang tidak tertangani kepada pengguna dan menghentikan eksekusi program.
Contoh kode berikut menunjukkan cara umum penggunaan try//catchfinally untuk menangani kesalahan.
try
{
file.ReadBlock(buffer, index, buffer.Length);
}
catch (FileNotFoundException e)
{
Server.Transfer("NoFileErrorPage.aspx", true);
}
catch (System.IO.IOException e)
{
Server.Transfer("IOErrorPage.aspx", true);
}
finally
{
if (file != null)
{
file.Close();
}
}
Dalam kode di atas, blok coba berisi kode yang perlu dijaga dari kemungkinan pengecualian. Blok dijalankan sampai pengecualian dilemparkan atau blok berhasil diselesaikan.
FileNotFoundException Jika pengecualian atau IOException pengecualian terjadi, eksekusi akan ditransfer ke halaman lain. Kemudian, kode yang terkandung dalam blok akhirnya dijalankan, apakah terjadi kesalahan atau tidak.
Menambahkan Dukungan Pengelogan Kesalahan
Sebelum menambahkan penanganan kesalahan ke aplikasi sampel Wingtip Toys, Anda akan menambahkan dukungan pengelogan ExceptionUtility kesalahan dengan menambahkan kelas ke folder Logika . Dengan melakukan ini, setiap kali aplikasi menangani kesalahan, detail kesalahan akan ditambahkan ke file log kesalahan.
Klik kanan folder Logika lalu pilih Tambahkan ->Item Baru.
Kotak dialog Tambahkan Item Baru ditampilkan.Pilih grup templat Visual C# ->Code di sebelah kiri. Kemudian, pilih Kelasdari daftar tengah dan beri nama ExceptionUtility.cs.
Pilih Tambahkan. File kelas baru ditampilkan.
Ganti kode yang ada dengan yang berikut ini:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.IO; namespace WingtipToys.Logic { // Create our own utility for exceptions public sealed class ExceptionUtility { // All methods are static, so this can be private private ExceptionUtility() { } // Log an Exception public static void LogException(Exception exc, string source) { // Include logic for logging exceptions // Get the absolute path to the log file string logFile = "~/App_Data/ErrorLog.txt"; logFile = HttpContext.Current.Server.MapPath(logFile); // Open the log file for append and write the log StreamWriter sw = new StreamWriter(logFile, true); sw.WriteLine("********** {0} **********", DateTime.Now); if (exc.InnerException != null) { sw.Write("Inner Exception Type: "); sw.WriteLine(exc.InnerException.GetType().ToString()); sw.Write("Inner Exception: "); sw.WriteLine(exc.InnerException.Message); sw.Write("Inner Source: "); sw.WriteLine(exc.InnerException.Source); if (exc.InnerException.StackTrace != null) { sw.WriteLine("Inner Stack Trace: "); sw.WriteLine(exc.InnerException.StackTrace); } } sw.Write("Exception Type: "); sw.WriteLine(exc.GetType().ToString()); sw.WriteLine("Exception: " + exc.Message); sw.WriteLine("Source: " + source); sw.WriteLine("Stack Trace: "); if (exc.StackTrace != null) { sw.WriteLine(exc.StackTrace); sw.WriteLine(); } sw.Close(); } } }
Ketika pengecualian terjadi, pengecualian dapat ditulis ke file log pengecualian dengan memanggil LogException metode . Metode ini mengambil dua parameter, objek pengecualian dan string yang berisi detail tentang sumber pengecualian. Log pengecualian ditulis ke file ErrorLog.txt di folder App_Data .
Menambahkan Halaman Kesalahan
Dalam aplikasi sampel Wingtip Toys, satu halaman akan digunakan untuk menampilkan kesalahan. Halaman kesalahan dirancang untuk menampilkan pesan kesalahan aman kepada pengguna situs. Namun, jika pengguna adalah pengembang yang membuat permintaan HTTP yang dilayani secara lokal di komputer tempat kode berada, detail kesalahan tambahan akan ditampilkan di halaman kesalahan.
Klik kanan nama proyek (Mainan Wingtip) di Penjelajah Solusi dan pilih Tambahkan ->Item Baru.
Kotak dialog Tambahkan Item Baru ditampilkan.Pilih grup Visual C# ->Templat web di sebelah kiri. Dari daftar tengah, pilih Formulir Web dengan Halaman Master, dan beri nama ErrorPage.aspx.
Klik Tambahkan.
Pilih file Site.Master sebagai halaman master, lalu pilih OK.
Ganti markup yang sudah ada dengan yang berikut ini:
<%@ Page Title="" Language="C#" AutoEventWireup="true" MasterPageFile="~/Site.Master" CodeBehind="ErrorPage.aspx.cs" Inherits="WingtipToys.ErrorPage" %> <asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server"> <h2>Error:</h2> <p></p> <asp:Label ID="FriendlyErrorMsg" runat="server" Text="Label" Font-Size="Large" style="color: red"></asp:Label> <asp:Panel ID="DetailedErrorPanel" runat="server" Visible="false"> <p> </p> <h4>Detailed Error:</h4> <p> <asp:Label ID="ErrorDetailedMsg" runat="server" Font-Size="Small" /><br /> </p> <h4>Error Handler:</h4> <p> <asp:Label ID="ErrorHandler" runat="server" Font-Size="Small" /><br /> </p> <h4>Detailed Error Message:</h4> <p> <asp:Label ID="InnerMessage" runat="server" Font-Size="Small" /><br /> </p> <p> <asp:Label ID="InnerTrace" runat="server" /> </p> </asp:Panel> </asp:Content>Ganti kode yang ada dari code-behind (ErrorPage.aspx.cs) sehingga muncul sebagai berikut:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using WingtipToys.Logic; namespace WingtipToys { public partial class ErrorPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // Create safe error messages. string generalErrorMsg = "A problem has occurred on this web site. Please try again. " + "If this error continues, please contact support."; string httpErrorMsg = "An HTTP error occurred. Page Not found. Please try again."; string unhandledErrorMsg = "The error was unhandled by application code."; // Display safe error message. FriendlyErrorMsg.Text = generalErrorMsg; // Determine where error was handled. string errorHandler = Request.QueryString["handler"]; if (errorHandler == null) { errorHandler = "Error Page"; } // Get the last error from the server. Exception ex = Server.GetLastError(); // Get the error number passed as a querystring value. string errorMsg = Request.QueryString["msg"]; if (errorMsg == "404") { ex = new HttpException(404, httpErrorMsg, ex); FriendlyErrorMsg.Text = ex.Message; } // If the exception no longer exists, create a generic exception. if (ex == null) { ex = new Exception(unhandledErrorMsg); } // Show error details to only you (developer). LOCAL ACCESS ONLY. if (Request.IsLocal) { // Detailed Error Message. ErrorDetailedMsg.Text = ex.Message; // Show where the error was handled. ErrorHandler.Text = errorHandler; // Show local access details. DetailedErrorPanel.Visible = true; if (ex.InnerException != null) { InnerMessage.Text = ex.GetType().ToString() + "<br/>" + ex.InnerException.Message; InnerTrace.Text = ex.InnerException.StackTrace; } else { InnerMessage.Text = ex.GetType().ToString(); if (ex.StackTrace != null) { InnerTrace.Text = ex.StackTrace.ToString().TrimStart(); } } } // Log the exception. ExceptionUtility.LogException(ex, errorHandler); // Clear the error from the server. Server.ClearError(); } } }
Saat halaman kesalahan ditampilkan, penanganan Page_Load aktivitas dijalankan. Di handler Page_Load , lokasi tempat kesalahan pertama kali ditangani ditentukan. Kemudian, kesalahan terakhir yang terjadi ditentukan dengan memanggil GetLastError metode objek Server. Jika pengecualian tidak ada lagi, pengecualian umum akan dibuat. Kemudian, jika permintaan HTTP dibuat secara lokal, semua detail kesalahan ditampilkan. Dalam hal ini, hanya komputer lokal yang menjalankan aplikasi web yang akan melihat detail kesalahan ini. Setelah informasi kesalahan ditampilkan, kesalahan ditambahkan ke file log dan kesalahan dihapus dari server.
Menampilkan Pesan Kesalahan yang Tidak Tertangani untuk Aplikasi
Dengan menambahkan customErrors bagian ke file Web.config , Anda dapat dengan cepat menangani kesalahan sederhana yang terjadi di seluruh aplikasi. Anda juga dapat menentukan cara menangani kesalahan berdasarkan nilai kode statusnya, seperti 404 - File tidak ditemukan.
Memperbarui Konfigurasi
Perbarui konfigurasi dengan menambahkan customErrors bagian ke file Web.config .
Di Penjelajah Solusi, temukan dan buka file Web.config di akar aplikasi sampel Wingtip Toys.
Tambahkan bagian
customErrorske file Web.config dalam simpul<system.web>sebagai berikut:<configuration> <system.web> <customErrors mode="On" defaultRedirect="ErrorPage.aspx?handler=customErrors%20section%20-%20Web.config"> <error statusCode="404" redirect="ErrorPage.aspx?msg=404&handler=customErrors%20section%20-%20Web.config"/> </customErrors> </system.web> </configuration>Simpan file Web.config.
Bagian customErrors menentukan mode , yang diatur ke "Aktif". Ini juga menentukan defaultRedirect, yang memberi tahu aplikasi halaman mana yang akan dinavigasi ketika kesalahan terjadi. Selain itu, Anda telah menambahkan elemen kesalahan tertentu yang menentukan cara menangani kesalahan 404 saat halaman tidak ditemukan. Nantinya dalam tutorial ini, Anda akan menambahkan penanganan kesalahan tambahan yang akan menangkap detail kesalahan di tingkat aplikasi.
Menjalankan Aplikasi
Anda dapat menjalankan aplikasi sekarang untuk melihat rute yang diperbarui.
Tekan F5 untuk menjalankan aplikasi sampel Wingtip Toys.
Browser terbuka dan menampilkan halaman Default.aspx .Masukkan URL berikut ke browser (pastikan untuk menggunakan nomor port Anda ):
https://localhost:44300/NoPage.aspxTinjau ErrorPage.aspx yang ditampilkan di browser.
Saat Anda meminta halaman NoPage.aspx , yang tidak ada, halaman kesalahan akan menampilkan pesan kesalahan sederhana dan informasi kesalahan terperinci jika detail tambahan tersedia. Namun, jika pengguna meminta halaman yang tidak ada dari lokasi jarak jauh, halaman kesalahan hanya akan menampilkan pesan kesalahan berwarna merah.
Menyertakan Pengecualian untuk Tujuan Pengujian
Untuk memverifikasi bagaimana aplikasi Anda akan berfungsi ketika terjadi kesalahan, Anda dapat dengan sengaja membuat kondisi kesalahan dalam ASP.NET. Dalam aplikasi sampel Wingtip Toys, Anda akan melemparkan pengecualian pengujian ketika halaman default dimuat untuk melihat apa yang terjadi.
Buka kode di belakang halaman Default.aspx di Visual Studio.
Halaman Default.aspx.cs code-behind akan ditampilkan.Di handler
Page_Load, tambahkan kode sehingga handler muncul sebagai berikut:protected void Page_Load(object sender, EventArgs e) { throw new InvalidOperationException("An InvalidOperationException " + "occurred in the Page_Load handler on the Default.aspx page."); }
Dimungkinkan untuk membuat berbagai jenis pengecualian. Dalam kode di atas, Anda membuat InvalidOperationException saat halaman Default.aspx dimuat.
Menjalankan Aplikasi
Anda dapat menjalankan aplikasi untuk melihat bagaimana aplikasi menangani pengecualian.
Tekan CTRL+F5 untuk menjalankan aplikasi sampel Wingtip Toys.
Aplikasi ini melempar InvalidOperationException.Catatan
Anda harus menekan CTRL+F5 untuk menampilkan halaman tanpa memecah kode untuk melihat sumber kesalahan di Visual Studio.
Tinjau ErrorPage.aspx yang ditampilkan di browser.
Seperti yang Anda lihat dalam detail kesalahan, pengecualian terperangkap oleh customError bagian dalam file Web.config .
Menambahkan Penanganan Kesalahan Application-Level
Daripada menjebak pengecualian menggunakan customErrors bagian dalam file Web.config , di mana Anda mendapatkan sedikit informasi tentang pengecualian, Anda dapat menjebak kesalahan di tingkat aplikasi dan mengambil detail kesalahan.
Di Penjelajah Solusi, temukan dan buka file Global.asax.cs.
Tambahkan handler Application_Error sehingga muncul sebagai berikut:
void Application_Error(object sender, EventArgs e) { // Code that runs when an unhandled error occurs. // Get last error from the server Exception exc = Server.GetLastError(); if (exc is HttpUnhandledException) { if (exc.InnerException != null) { exc = new Exception(exc.InnerException.Message); Server.Transfer("ErrorPage.aspx?handler=Application_Error%20-%20Global.asax", true); } } }
Ketika kesalahan terjadi dalam aplikasi, Application_Error handler dipanggil. Dalam handler ini, pengecualian terakhir diambil dan ditinjau. Jika pengecualian tidak tertangani dan pengecualian berisi detail pengecualian dalam (yaitu, InnerException tidak null), aplikasi mentransfer eksekusi ke halaman kesalahan tempat detail pengecualian ditampilkan.
Menjalankan Aplikasi
Anda dapat menjalankan aplikasi untuk melihat detail kesalahan tambahan yang disediakan dengan menangani pengecualian di tingkat aplikasi.
Tekan CTRL+F5 untuk menjalankan aplikasi sampel Wingtip Toys.
Aplikasi ini melempar .InvalidOperationExceptionTinjau ErrorPage.aspx yang ditampilkan di browser.
Menambahkan Penanganan Kesalahan Page-Level
Anda dapat menambahkan penanganan kesalahan tingkat halaman ke halaman baik dengan menggunakan penambahan ErrorPage atribut ke @Page arahan halaman, atau dengan menambahkan Page_Error penanganan aktivitas ke kode di belakang halaman. Di bagian ini, Anda akan menambahkan Page_Error penanganan aktivitas yang akan mentransfer eksekusi ke halaman ErrorPage.aspx .
Di Penjelajah Solusi, temukan dan buka file Default.aspx.cs.
Page_ErrorTambahkan handler sehingga kode di belakang muncul sebagai berikut:using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace WingtipToys { public partial class _Default : Page { protected void Page_Load(object sender, EventArgs e) { throw new InvalidOperationException("An InvalidOperationException " + "occurred in the Page_Load handler on the Default.aspx page."); } private void Page_Error(object sender, EventArgs e) { // Get last error from the server. Exception exc = Server.GetLastError(); // Handle specific exception. if (exc is InvalidOperationException) { // Pass the error on to the error page. Server.Transfer("ErrorPage.aspx?handler=Page_Error%20-%20Default.aspx", true); } } } }
Ketika kesalahan terjadi di halaman, penanganan Page_Error aktivitas dipanggil. Dalam handler ini, pengecualian terakhir diambil dan ditinjau.
InvalidOperationException Jika terjadi, penanganan Page_Error aktivitas mentransfer eksekusi ke halaman kesalahan tempat detail pengecualian ditampilkan.
Menjalankan Aplikasi
Anda dapat menjalankan aplikasi sekarang untuk melihat rute yang diperbarui.
Tekan CTRL+F5 untuk menjalankan aplikasi sampel Wingtip Toys.
Aplikasi ini melempar .InvalidOperationExceptionTinjau ErrorPage.aspx yang ditampilkan di browser.
Tutup jendela browser Anda.
Menghapus Pengecualian yang Digunakan untuk Pengujian
Untuk memungkinkan aplikasi sampel Wingtip Toys berfungsi tanpa melemparkan pengecualian yang Anda tambahkan sebelumnya dalam tutorial ini, hapus pengecualian.
Buka kode di belakang halaman Default.aspx .
Di handler
Page_Load, hapus kode yang melempar pengecualian sehingga handler muncul sebagai berikut:protected void Page_Load(object sender, EventArgs e) { }
Menambahkan Pengelogan Kesalahan Code-Level
Seperti disebutkan sebelumnya dalam tutorial ini, Anda dapat menambahkan pernyataan try/catch untuk mencoba menjalankan bagian kode dan menangani kesalahan pertama yang terjadi. Dalam contoh ini, Anda hanya akan menulis detail kesalahan ke file log kesalahan sehingga kesalahan dapat ditinjau nanti.
Di Penjelajah Solusi, di folder Logika, temukan dan buka file PayPalFunctions.cs.
HttpCallPerbarui metode sehingga kode muncul sebagai berikut:public string HttpCall(string NvpRequest) { string url = pEndPointURL; string strPost = NvpRequest + "&" + buildCredentialsNVPString(); strPost = strPost + "&BUTTONSOURCE=" + HttpUtility.UrlEncode(BNCode); HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url); objRequest.Timeout = Timeout; objRequest.Method = "POST"; objRequest.ContentLength = strPost.Length; try { using (StreamWriter myWriter = new StreamWriter(objRequest.GetRequestStream())) { myWriter.Write(strPost); } } catch (Exception e) { // Log the exception. WingtipToys.Logic.ExceptionUtility.LogException(e, "HttpCall in PayPalFunction.cs"); } //Retrieve the Response returned from the NVP API call to PayPal. HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse(); string result; using (StreamReader sr = new StreamReader(objResponse.GetResponseStream())) { result = sr.ReadToEnd(); } return result; }
Kode di atas memanggil LogException metode yang terkandung dalam ExceptionUtility kelas . Anda menambahkan file kelas ExceptionUtility.cs ke folder Logika sebelumnya dalam tutorial ini. Metode ini LogException mengambil dua parameter. Parameter pertama adalah objek pengecualian. Parameter kedua adalah string yang digunakan untuk mengenali sumber kesalahan.
Memeriksa Informasi Pengelogan Kesalahan
Seperti disebutkan sebelumnya, Anda dapat menggunakan log kesalahan untuk menentukan kesalahan mana dalam aplikasi Anda yang harus diperbaiki terlebih dahulu. Tentu saja, hanya kesalahan yang telah terperangkap dan ditulis ke log kesalahan yang akan direkam.
Di Penjelajah Solusi, temukan dan buka file ErrorLog.txt di folder App_Data.
Anda mungkin perlu memilih opsi "Tampilkan Semua File" atau opsi "Refresh" dari bagian atas Penjelajah Solusi untuk melihat file ErrorLog.txt.Tinjau log kesalahan yang ditampilkan di Visual Studio:
Pesan Kesalahan Aman
Penting untuk dicatat bahwa ketika aplikasi Anda menampilkan pesan kesalahan, aplikasi tidak boleh memberikan informasi bahwa pengguna jahat mungkin merasa berguna dalam menyerang aplikasi Anda. Misalnya, jika aplikasi Anda tidak berhasil mencoba menulis ke database, aplikasi tidak boleh menampilkan pesan kesalahan yang menyertakan nama pengguna yang digunakannya. Untuk alasan ini, pesan kesalahan umum berwarna merah ditampilkan kepada pengguna. Semua detail kesalahan tambahan hanya ditampilkan kepada pengembang di komputer lokal.
Menggunakan ELMAH
ELMAH (Error Logging Modules and Handler) adalah fasilitas pengelogan kesalahan yang Anda colokkan ke aplikasi ASP.NET Anda sebagai paket NuGet. ELMAH menyediakan kemampuan berikut:
- Pengelogan pengecualian yang tidak tertangani.
- Halaman web untuk melihat seluruh log pengecualian yang tidak tertangani yang dikodekan ulang.
- Halaman web untuk melihat detail lengkap setiap pengecualian yang dicatat.
- Pemberitahuan email tentang setiap kesalahan pada saat terjadi.
- Umpan RSS dari 15 kesalahan terakhir dari log.
Sebelum Anda dapat bekerja dengan ELMAH, Anda harus menginstalnya. Ini mudah menggunakan alat penginstal paket NuGet . Seperti disebutkan sebelumnya dalam seri tutorial ini, NuGet adalah ekstensi Visual Studio yang memudahkan untuk menginstal dan memperbarui pustaka dan alat sumber terbuka di Visual Studio.
Dalam Visual Studio, dari menu Alat, pilih Manajer> Paket NuGetKelola Paket NuGet untuk Solusi.
Kotak dialog Kelola Paket NuGet ditampilkan dalam Visual Studio.
Dalam kotak dialog Kelola Paket NuGet , perluas Online di sebelah kiri, lalu pilih nuget.org. Kemudian, temukan dan instal paket ELMAH dari daftar paket yang tersedia secara online.
Anda harus memiliki koneksi internet untuk mengunduh paket.
Dalam kotak dialog Pilih Proyek , pastikan pilihan WingtipToys dipilih, lalu klik OK.
Klik Tutup dalam kotak dialog Kelola Paket NuGet jika diperlukan.
Jika Visual Studio meminta Anda memuat ulang file yang terbuka, pilih "Ya untuk Semua".
Paket ELMAH menambahkan entri untuk dirinya sendiri dalam file Web.config di akar proyek Anda. Jika Visual Studio menanyakan apakah Anda ingin memuat ulang file Web.config yang dimodifikasi, klik Ya.
ELMAH sekarang siap untuk menyimpan kesalahan yang tidak tertangani yang terjadi.
Menampilkan Log ELMAH
Melihat log ELMAH itu mudah, tetapi pertama-tama Anda akan membuat pengecualian yang tidak tertangani yang akan dicatat di log ELMAH.
Tekan CTRL+F5 untuk menjalankan aplikasi sampel Wingtip Toys.
Untuk menulis pengecualian yang tidak tertangani ke log ELMAH, navigasikan di browser Anda ke URL berikut (menggunakan nomor port Anda):
https://localhost:44300/NoPage.aspxHalaman kesalahan akan ditampilkan.Untuk menampilkan log ELMAH, navigasikan di browser Anda ke URL berikut (menggunakan nomor port Anda):
https://localhost:44300/elmah.axd
Ringkasan
Dalam tutorial ini, Anda telah belajar tentang menangani kesalahan di tingkat aplikasi, tingkat halaman, dan tingkat kode. Anda juga telah mempelajari cara mencatat kesalahan yang ditangani dan tidak tertangani untuk ditinjau nanti. Anda menambahkan utilitas ELMAH untuk memberikan pengelogan pengecualian dan pemberitahuan ke aplikasi Anda menggunakan NuGet. Selain itu, Anda telah mempelajari tentang pentingnya pesan kesalahan yang aman.
Kesimpulan Seri Tutorial
Terima kasih telah mengikutinya. Saya harap serangkaian tutorial ini membantu Anda menjadi lebih akrab dengan ASP.NET Web Forms. Jika Anda memerlukan informasi selengkapnya tentang fitur Formulir Web yang tersedia di ASP.NET 4.5 dan Visual Studio 2013, lihat ASP.NET dan Alat Web untuk Catatan Rilis Visual Studio 2013. Selain itu, pastikan untuk melihat tutorial yang disebutkan di bagian Langkah Berikutnya dan tentukan mencoba uji coba Azure gratis.
Langkah berikutnya
Pelajari selengkapnya tentang menyebarkan aplikasi web Anda ke Microsoft Azure, lihat Menyebarkan Aplikasi Formulir Web ASP.NET Aman dengan Keanggotaan, OAuth, dan SQL Database ke Situs Web Azure.
Coba Gratis
Microsoft Azure - Uji Coba Gratis
Menerbitkan situs web Anda ke Microsoft Azure akan menghemat waktu, pemeliharaan, dan pengeluaran Anda. Ini adalah proses cepat untuk menyebarkan aplikasi web Anda ke Azure. Saat Anda perlu memelihara dan memantau aplikasi web Anda, Azure menawarkan berbagai alat dan layanan. Mengelola data, lalu lintas, identitas, cadangan, olahpesan, media, dan performa di Azure. Dan, semua ini disediakan dalam pendekatan yang sangat hemat biaya.
Sumber Daya Tambahan
Detail Kesalahan Pengelogan dengan Pemantauan Kesehatan ASP.NET
ELMAH
Pengakuan
Saya ingin mengucapkan terima kasih kepada orang-orang berikut yang memberikan kontribusi signifikan pada konten seri tutorial ini:
- Alberto Poblacion, MVP & MCT, Spanyol
- Alex Thissen, Belanda (twitter: @alexthissen)
- Andre Tournier, Amerika Serikat
- Apurva Joshi, Microsoft
- Bojan Vrhovnik, Slovenia
- Bruno Sonnino, Brasil (twitter: @bsonnino)
- Carlos dos Santos, Brasil
- Dave Campbell, Amerika Serikat (twitter: @windowsdevnews)
- Jon Galloway, Microsoft (twitter: @jongalloway)
- Michael Sharps, Amerika Serikat (twitter: @mrsharps)
- Mike Pope
- Mitchel Sellers, Amerika Serikat (twitter: @MitchelSellers)
- Paul Cociuba, Microsoft
- Paulo Morgado, Portugal
- Pranav Rastogi, Microsoft
- Tim Ammann, Microsoft
- Tom Dykstra, Microsoft
Kontribusi Komunitas
- Graham Mendick (@grahammendick)
Sampel kode terkait Visual Studio 2012 di MSDN: Navigasi Mainan Wingtip - James Chaney (jchaney@agvance.net)
Sampel kode terkait Visual Studio 2012 di MSDN: ASP.NET Seri Tutorial Formulir Web 4.5 di Visual Basic - Andrielle Azevedo - Kontributor Audiens Teknis Microsoft (twitter: @driazevedo)
Terjemahan Visual Studio 2012: Iniciando com ASP.NET Web Forms 4.5 - Bagian 1 - Introdução e Visão Geral