Visual Basic .NET kullanarak ASP.NET'de özel hata raporlama sayfaları oluşturma
Bu makalede, ASP.NET oluştuğunda hataları yakalamak ve bunlara yanıt vermek için Microsoft Visual Basic .NET kodunun nasıl kullanılacağı açıklanır.
Orijinal ürün sürümü: Visual Basic .NET, ASP.NET
Özgün KB numarası: 308132
Özet
ASP.NET, geleneksel Active Server Sayfalarından (ASP) hata işleme seçeneklerini geliştirdi. ASP.NET'da uygulamalarınızdaki çeşitli düzeylerdeki hataları işleyebilirsiniz.
ASP.NET'deki yeni özellikler
ASP.NET, hataları işleme ve yanıtlama konusunda çeşitli ilerlemeler sunar. Geleneksel ASP'de hatalarla (veya try-catch
JScript'teki bloklarla On Error Resume Next
) ilgilenirsiniz. Alternatif olarak, Internet Information Services (IIS) çalıştırıyorsanız özel hata raporlama sayfası oluşturmak için nesnesini kullanırsınız ASPError
. Ancak bu yaklaşımların sınırlamaları vardır.
ASP.NET, ASP.NET bir uygulamayı çalıştırdığınızda oluşabilecek hataları işleyebileceğiniz ve yanıtlayabileceğiniz çeşitli düzeyler sağlar. ASP.NET, oluşan hataları yakalamanıza ve yanıtlamanıza olanak sağlayan üç ana yöntem sağlar: Page_Error
olay, Application_Error
olay ve uygulama yapılandırma dosyası (Web.config).
Bu makalede, ASP.NET uygulamanızda bu yeni özelliklerin nasıl kullanılacağı gösterilmektedir. Bu makalede, doğrudan ASP.NET ilgili olduğu için özel hata sayfalarının ve genel hata raporlamanın nasıl sağlandığı açıklansa da, bu makalede blok ve Ortak Dil Çalışma Zamanı (CLR) özel durum sistemi gibi try-catch-finally
diğer hata işleme yaklaşımları açıklanmaz.
Page_Error olayını kullanma
Olay, Page_Error
sayfa düzeyinde oluşan hataları yakalamanın bir yolunu sağlar. Hata bilgilerini görüntüleyebilir (izleyebileceğiniz örnek kodun yaptığı gibi) veya olayı günlüğe kaydedebilir veya başka bir eylem gerçekleştirebilirsiniz.
Not
Bu örnek, ayrıntılı hata bilgilerini tarayıcıda yalnızca tanıtım amacıyla görüntüler. Özellikle uygulama İnternet'te çalışırken uygulamanın son kullanıcısına ayrıntılı bilgiler görüntülerken dikkatli olmak istersiniz. Daha uygun bir eylem, kullanıcıya bir hata oluştuğu konusunda bildirimde bulunan bir ileti görüntülemek ve ardından olay günlüğünde belirli hata ayrıntılarını günlüğe kaydetmektir.
Bu örnek, olayda Page_Load
hata oluşmasını zorlayan null bir özel durum oluşturur. Olayı test Page_Error
edecek ilk sayfayı oluşturmak için bu adımları izleyin.
Projenize PageEvent.aspx adlı yeni bir dosya eklemek için şu adımları izleyin:
- Visual Studio .NET'i açın.
- Çözüm Gezgini proje düğümüne sağ tıklayın, Ekle'nin üzerine gelin ve Web Formu Ekle'ye tıklayın.
- Ad metin kutusuna PageEvent.aspx yazın ve Aç'a tıklayın.
PageEvent.aspx aşağıdaki kodu ekleyin:
<%@ Page Language="vb"%> <script runat=server> Sub Page_Load(Sender as object, e as EventArgs) throw(new System.ArgumentNullException()) End Sub Sub Page_Error(Sender as object, e as EventArgs) Dim objErr as Exception = Server.GetLastError().GetBaseException() Dim err as String = "<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() End Sub </script>
Dosya menüsünden PageEvent.aspx Kaydet'e tıklayın.
Sayfayı çalıştırmak için sayfaya sağ tıklayın ve tarayıcıda görüntüle'ye tıklayın. Hatanın kod belirtimlerine göre oluştuğuna ve bildirildiğine dikkat edin.
Not
Kodun çağrısı Server.ClearError
oluşturduğunu fark edebilirsiniz. Bu, hatanın işlenecek olaya devam etmesini Application_Error
engeller.
Application_Error olayını kullanma
Olaya benzer şekilde Page_Error
, uygulamanızda oluşan hataları yakalamak için olayını kullanabilirsiniz Application_Error
. Olayın uygulama genelindeki kapsamı nedeniyle, uygulama hata bilgilerini günlüğe kaydedebilir veya oluşabilecek diğer uygulama düzeyi hataları işleyebilirsiniz.
İzlenecek örnek, önceki olay kodu örneğini Page_Error
temel alır ve olaydaki hata olayda Page_Load
Page_Error
yakalanmazsa tetiklenir. Olay Application_Error
, uygulamanızın Global.asax dosyasında belirtilir. Kolaylık olması için, bu bölümdeki adımlar özel durum oluşturmak, Global.asax dosyasının durumunda hatayı Application_Error
yakalamak ve hatayı olay günlüğüne yazmak için yeni bir sayfa oluşturur. Aşağıdaki adımlarda olayın nasıl kullanılacağı gösterilmektedir Application_Error
:
Projenize AppEvent.aspx adlı yeni bir dosya ekleyin.
AppEvent.aspx aşağıdaki kodu ekleyin:
<script language=vb runat="server"> Sub Page_Load(Sender as object, e as EventArgs) throw(new ArgumentNullException()) End Sub </script>
Dosya menüsünde Kaydet'eAppEvent.aspx tıklayın.
Application_Error
AppEvent.aspx sayfasında oluşturduğunuzPage_Load
hatayı yakalamak için olayı Global.asax dosyasına ekleyin. Olay günlüğünü kullanmak için Global.asax'a ad alanı içinSystem.Diagnostics
birImports
deyim eklemeniz gerektiğine dikkat edin.Global.asax dosyasına aşağıdaki kodu ekleyin:
Imports System.Diagnostics Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) Dim objErr As Exception = Server.GetLastError().GetBaseException() Dim err As String = "Error Caught in Application_Error event" & _ System.Environment.NewLine & _ "Error in: " & Request.Url.ToString() & _ System.Environment.NewLine & _ "Error Message: " & objErr.Message.ToString() & _ System.Environment.NewLine & _ "Stack Trace:" & objErr.StackTrace.ToString() EventLog.WriteEntry("Sample_WebApp", err, EventLogEntryType.Error) Server.ClearError() additional actions... End Sub
Global.asax dosyasını kaydedin.
Visual Studio .NET'te, Derleme menüsünde Derle'ye tıklayın.
Sayfaya sağ tıklayın ve ardından Tarayıcıda Görüntüle'ye tıklayın. Bu durumda sayfa boş olacaktır ancak olay günlüğüne yeni bir giriş eklendiğini fark etmelisiniz. Bu örnek, uygulama günlüğünde Olay Görüntüleyicisi erişilebilen bir girdi oluşturur. Hatayı günlüğe kaydettikten sonra kullanıcıyı daha kullanıcı dostu başka bir hata sayfasına yönlendirmek veya gerekirse bazı ek eylemler gerçekleştirmek isteyebilirsiniz.
Web.config dosyasını kullanma
veya Application_Error
olayındaki Page_Error
hatayı çağırmaz Server.ClearError
veya yakalamazsanız, hata Web.config dosyasının <customErrors>
bölümündeki ayarlara göre işlenir. <customErrors>
bölümünde, bir yeniden yönlendirme sayfasını varsayılan hata sayfası (defaultRedirect
) olarak belirtebilir veya tetiklenen Köprü Metni Aktarım Protokolü (HTTP) hata kodunu temel alarak belirli bir sayfaya belirtebilirsiniz. Kullanıcının aldığı hata iletisini özelleştirmek için bu yöntemi kullanabilirsiniz.
Uygulamanızın önceki düzeylerinden herhangi birinde kapana kısılmayan bir hata oluşursa, bu özel sayfa görüntülenir. Bu bölümde Global.asax dosyasının hiçbir zaman çağrılamayacak şekilde Server.ClearError
nasıl değiştirileceği gösterilmektedir. Sonuç olarak hata, hatayı yakalamanın son noktası olarak Web.config dosyasında işlenir.
Önceki örnekteki Global.asax dosyasını açın.
Hatanın
Server.ClearError
Web.config dosyasında ortaya çıkması için satırı açıklama satırına açıklama ekleyin.Değişikliklerinizi Global.asax'a kaydedin. Kodunuz artık aşağıdakine benzer görünmelidir:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) Dim objErr As Exception = Server.GetLastError().GetBaseException() Dim err As String = "Error Caught in Application_Error event" & _ System.Environment.NewLine & _ "Error in: " & Request.Url.ToString() & _ System.Environment.NewLine & _ "Error Message: " & objErr.Message.ToString() & _ System.Environment.NewLine & _ "Stack Trace:" & objErr.StackTrace.ToString() EventLog.WriteEntry("Sample_WebApp", err, EventLogEntryType.Error) Server.ClearError() additional actions... End Sub
Kullanıcıyı özel bir sayfaya
<customErrors>
yönlendirmek için aşağıdaki kodu bölümüne ekleyin:<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"> </customErrors>
Not
öznitelikteki
defaultRedirect
dosya yolunu, ilgili Web sunucusuna ve uygulama adlarına başvurması için değiştirmeniz gerekir.Bu düzeyde tuzağa düşürülen hatalar varsayılan hata sayfasına gönderildiğinden, ErrorStatus.htmadlı bir hata sayfası oluşturmanız gerekir. Kullanıcıya sunulanları denetlemek için bu yöntemi kullandığınızı unutmayın, bu nedenle bu örnekte hata sayfası için .htm bir sayfa kullanılır. ErrorStatus.htmiçin aşağıdaki kodu ekleyin:
<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>
Kodu test etmek için dosyaları kaydedin, projeyi derleyin ve AppEvent.aspx tarayıcıda görüntüleyin . Hata oluştuğunda ErrorStatus.htm sayfasına yönlendirildiğinize dikkat edin. Bölümdeki özniteliğin
defaultRedirect
<customErrors>
değerindeki varsayılan hata sayfasına başvurabilirsiniz ancak, tetiklenen HTTP hata koduna göre yeniden yönlendirilecek belirli bir sayfa da belirtebilirsiniz. Alt<error>
öğe bu seçeneğe izin verir. Örneğin:<customErrors defaultRedirect="http://hostName/applicationName/errorStatus.htm" mode="On"> <error statusCode="404" redirect="filenotfound.htm"/> </customErrors>
Not
bölümünde belirtilen defaultRedirect
<customErrors>
sayfa bir .htm dosyasıdır. bir .aspx sayfasında (ve Application_Error
örneklerinin Page_Error
kullandığı) kullanmayı GetLastError
planlıyorsanız, yeniden yönlendirme gerçekleşmeden önce özel durumu bir oturum değişkeninde veya başka bir yaklaşımda depolamanız gerekir.
<customErrors>
bölümünde olarak ayarlanmış On
bir mode
öznitelik olduğuna dikkat edin. mode
özniteliği, hata yeniden yönlendirmesinin nasıl gerçekleştiğini denetlemek için kullanılır. Örneğin, uygulamayı geliştiriyorsanız, büyük olasılıkla gerçek ASP.NET hata iletilerini görmek ve daha kullanıcı dostu hata sayfasına yeniden yönlendirilmesini istemezsiniz. mode
özniteliği aşağıdaki ayarları içerir:
On
: İşlenmeyen özel durumlar kullanıcıyı belirtilendefaultRedirect
sayfaya yönlendirir. Bumode
genellikle üretimde kullanılır.Off
: Kullanıcılar özel durum bilgilerini alır ve sayfayadefaultRedirect
yeniden yönlendirilmez. Bumode
genellikle geliştirme aşamasında kullanılır.RemoteOnly
: Yalnızca yerel bilgisayarda siteye erişen kullanıcılar (localhost kullanarak) özel durum bilgilerini alır. Diğer tüm kullanıcılar sayfayadefaultRedirect
yönlendirilir. Bu mod çoğunlukla hata ayıklama için kullanılır.
Sorun giderme
ASP.NET, Windows'a varsayılan yüklemesinde bir çalışan işleminde Web uygulaması kodu çalıştırır. Bu işlemin kimliği varsayılan olarak ASPNET hesabı olarak adlandırılan ayrıcalıksız bir yerel hesap olarak ayarlanır. ASP.NET beta sürümlerinde işlem kimliği, makinede birçok ayrıcalığı olan güçlü bir yönetim hesabı olan Sistem'dir.
Windows Server'da (IIS) varsayılan yüklemesinde ASP.NET bir çalışan işleminde Web uygulaması kodu çalıştırır. Bu işlemin kimliği varsayılan olarak NetworkService adlı sınırlı bir hesaptır.
Bu değişiklik ve bu makaledeki kodu çalıştırmayı nasıl etkileyebilecekleri ve ek erişim haklarına ihtiyaç duyabilecek diğer kodlar hakkında daha fazla bilgi için bkz . desenler & uygulamaları
Başvurular
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin