Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Scott Mitchell
Örnek kodu görüntüleme veya indirme (indirme)
Üretimdeki bir web uygulamasında çalışma zamanı hatası oluştuğunda, bir geliştiriciyi bilgilendirmek ve hatanın daha sonraki bir noktada tanılanabilmesi için günlüğe kaydetmek önemlidir. Bu öğretici, ASP.NET çalışma zamanı hatalarını nasıl işlediğine ilişkin bir genel bakış sağlar ve ASP.NET çalışma zamanına kadar işlenmeyen bir özel durum oluştuğunda özel kodun yürütülmesini sağlamak için tek bir yol sunar.
Giriş
bir ASP.NET uygulamasında işlenmeyen bir özel durum oluştuğunda, olayı tetikleyen ve uygun hata sayfasını görüntüleyen ASP.NET çalışma zamanına Error
kadar kabarır. Üç farklı tür hata sayfası vardır: Çalışma Zamanı Hatası Ölüm Sarı Ekranı (YSOD); Özel Durum Ayrıntıları YSOD; ve özel hata sayfaları. Önceki öğreticide, uygulamayı uzak kullanıcılar için özel bir hata sayfası ve yerel olarak ziyaret eden kullanıcılar için Özel Durum Ayrıntıları YSOD kullanacak şekilde yapılandırdık.
Sitenin görünümüyle eşleşen insan dostu bir özel hata sayfası kullanmak varsayılan Çalışma Zamanı Hatası YSOD'ye tercih edilir, ancak özel hata sayfası görüntülemek kapsamlı bir hata işleme çözümünün yalnızca bir parçasıdır. Üretim ortamındaki bir uygulamada hata oluştuğunda, özel durumun nedenini ortaya çıkarabilmeleri ve giderebilmeleri için geliştiricilere hatanın bildirilmesi önemlidir. Ayrıca, hatanın daha sonraki bir noktada incelenebilmesi ve tanılanabilmesi için hatanın ayrıntıları günlüğe kaydedilmelidir.
Bu öğreticide, işlenmeyen bir özel durumun ayrıntılarına nasıl erişileceği gösterilmektedir, böylece bunlar günlüğe kaydedilebilir ve bir geliştiriciye bildirilebilir. Bu öğreticiden sonraki iki öğreticide, biraz yapılandırmadan sonra geliştiricilere çalışma zamanı hatalarını otomatik olarak bildirecek ve ayrıntılarını günlüğe kaydedecek hata günlüğü kitaplıkları incelenir.
Not
Bu öğreticide incelenen bilgiler, işlenmeyen özel durumları bazı benzersiz veya özelleştirilmiş bir şekilde işlemeniz gerekiyorsa en yararlı olacaktır. Yalnızca özel durumu günlüğe kaydetmeniz ve bir geliştiriciye bildirmeniz gereken durumlarda, hata günlüğü kitaplığını kullanmak yoldur. Sonraki iki öğretici, bu tür iki kitaplıkla ilgili genel bir bakış sağlar.
Olay oluşturulduğundaError
kodu yürütme
Olaylar, bir nesneye ilginç bir şeyin oluştuğuna işaret eden bir mekanizma ve başka bir nesnenin yanıt olarak kod yürütmesi için bir mekanizma sağlar. ASP.NET geliştirici olarak olaylar açısından düşünmeye alışkınsınız. Ziyaretçi belirli bir Düğmeye tıkladığında bazı kodlar çalıştırmak istiyorsanız, söz konusu Düğmenin Click
olayı için bir olay işleyicisi oluşturur ve kodunuzu buraya koyarsınız. İşlenmeyen bir özel durum oluştuğunda ASP.NET çalışma zamanının olayını yükselttiği Error
göz önünde bulundurulduğunda, hatanın ayrıntılarını günlüğe kaydetme kodunun bir olay işleyicisine gitmesi gerekir. Ancak olay için nasıl bir olay işleyicisi Error
oluşturursunuz?
Olay Error
, isteğin ömrü boyunca HTTP işlem hattındaki HttpApplication
belirli aşamalarda oluşturulan sınıftaki birçok olaydan biridir. Örneğin, sınıfın HttpApplication
BeginRequest
olayı her isteğin başlangıcında oluşturulur; AuthenticateRequest
bir güvenlik modülü istek sahibini tanımladığında olayı oluşturulur. Bu HttpApplication
olaylar, sayfa geliştiricisine isteğin ömrü boyunca çeşitli noktalarda özel mantık yürütmesi için bir araç sağlar.
Olaylar için HttpApplication
olay işleyicileri adlı Global.asax
özel bir dosyaya yerleştirilebilir. Bu dosyayı web sitenizde oluşturmak için, adlı Global.asax
Genel Uygulama Sınıfı şablonunu kullanarak web sitenizin köküne yeni bir öğe ekleyin.
Şekil 1: Web uygulamanıza ekleme Global.asax
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Visual Studio tarafından oluşturulan dosyanın içeriği ve yapısı Global.asax
, Web Uygulaması Projesi (WAP) veya Web Sitesi Projesi (WSP) kullanmanıza bağlı olarak biraz farklılık gösterir. WAP ile , Global.asax
ve Global.asax.vb
olmak üzere iki ayrı dosya Global.asax
olarak uygulanır. Dosya, Global.asax
dosyaya .vb
başvuran bir yönergeden başka bir @Application
şey içermiyor; ilgili olay işleyicileri dosyada Global.asax.vb
tanımlanır. WSP'ler için yalnızca tek bir dosya oluşturulur Global.asax
ve olay işleyicileri bir <script runat="server">
blokta tanımlanır.
Global.asax
Visual Studio'nun Genel Uygulama Sınıfı şablonu tarafından WAP'de oluşturulan dosya, sırasıyla , Application_AuthenticateRequest
ve Application_Error
olay işleyicileri olan , AuthenticateRequest
ve Error
adlı Application_BeginRequest
olay BeginRequest
işleyicilerini HttpApplication
içerir. Ayrıca, Session_Start
Application_End
web uygulaması başlatıldığında, yeni bir oturum başlatıldığında, uygulama sona erdiğinde ve Session_End
sırasıyla bir oturum sona erdiğinde tetiklenen olay işleyicileri olan , , ve adlı Application_Start
olay işleyicileri de vardır. Global.asax
Visual Studio tarafından WSP'de oluşturulan dosya yalnızca Application_Error
, Application_Start
, Session_Start
, Application_End
ve Session_End
olay işleyicilerini içerir.
Not
ASP.NET uygulamasını dağıtırken dosyayı üretim ortamına kopyalamanız Global.asax
gerekir. Global.asax.vb
WAP'de oluşturulan dosyanın, bu kod projenin derlemesinde derlendiğinden üretime kopyalanması gerekmez.
Visual Studio'nun Genel Uygulama Sınıfı şablonu tarafından oluşturulan olay işleyicileri kapsamlı değildir. Olay işleyicisini adlandırarak herhangi bir HttpApplication
olay için bir olay işleyicisi Application_EventName
ekleyebilirsiniz. Örneğin, dosyaya Global.asax
aşağıdaki kodu ekleyerek olay için bir olay işleyicisi AuthorizeRequest
oluşturabilirsiniz:
Sub Application_AuthorizeRequest(ByVal sender As Object, ByVal e As EventArgs)
' Event handler code
End Sub
Benzer şekilde, Genel Uygulama Sınıfı şablonu tarafından oluşturulan ve gerekli olmayan tüm olay işleyicilerini kaldırabilirsiniz. Bu öğreticide yalnızca olay için bir olay işleyicisi Error
gerekir; diğer olay işleyicilerini dosyadan kaldırmaktan Global.asax
çekinmeyin.
Not
HTTP Modülleri, olaylar için HttpApplication
olay işleyicilerini tanımlamanın başka bir yolunu sunar. HTTP Modülleri, doğrudan web uygulaması projesine yerleştirilebilen veya ayrı bir sınıf kitaplığına ayrılabilen bir sınıf dosyası olarak oluşturulur. Http Modülleri bir sınıf kitaplığına ayrılabildiğinden, olay işleyicileri oluşturmak HttpApplication
için daha esnek ve yeniden kullanılabilir bir model sunar. Global.asax
Dosya bulunduğu web uygulamasına özgü olsa da, HTTP Modülleri derlemeler halinde derlenebilir; bu noktada HTTP Modülünü bir web sitesine eklemek, derlemeyi Bin
klasörüne bırakmak ve Modülü 'Web.config
ye kaydetmek kadar basittir. Bu öğreticide HTTP Modülleri oluşturma ve kullanma konusuna bakılmaz, ancak aşağıdaki iki öğreticide kullanılan iki hata günlüğü kitaplığı HTTP Modülleri olarak uygulanır. HTTP Modüllerinin avantajları hakkında daha fazla arka plan için bkz . Takılabilir ASP.NET Bileşenleri Oluşturmak için HTTP Modülleri ve İşleyicileri Kullanma.
İşlenmeyen Özel Durum Hakkında Bilgi Alma
Bu noktada, olay işleyicisi olan Application_Error
bir Global.asax dosyası var. Bu olay işleyicisi yürütürken bir geliştiriciye hatayı bildirmemiz ve ayrıntılarını günlüğe kaydetmemiz gerekir. Bu görevleri gerçekleştirmek için öncelikle ortaya çıkarılan özel durumun ayrıntılarını belirlememiz gerekir. Olayın tetiklenmeye neden olan işlenmeyen özel durumun ayrıntılarını almak için Sunucu nesnesinin GetLastError
Error
yöntemini kullanın.
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Get the error details
Dim lastErrorWrapper As HttpException = _
CType(Server.GetLastError(), HttpException)
End Sub
GetLastError
yöntemi, .NET Framework'teki tüm özel durumlar için temel tür olan türünde Exception
bir nesnesi döndürür. Ancak yukarıdaki kodda tarafından döndürülen GetLastError
Exception nesnesini bir HttpException
nesneye atıyorum. Error
bir ASP.NET kaynağı işlenirken bir özel durum oluştuğundan olay tetikleniyorsa, oluşturulan özel durum içinde HttpException
sarmalanır. Error olayına neden olan gerçek özel durumu almak için özelliğini kullanın InnerException
. Error
Olay, var olmayan bir sayfaya yönelik istek gibi HTTP tabanlı bir özel durum nedeniyle oluşturulduysa, bir HttpException
oluşturulur, ancak iç özel durumu yoktur.
Aşağıdaki kod, olayını tetikleyen Error
özel durum hakkındaki bilgileri almak ve adlı lastErrorWrapper
bir değişkende depolamak için öğesini HttpException
kullanırGetLastErrormessage
. Ardından, kaynak özel durumun türünü, iletisini ve yığın izlemesini üç dize değişkeninde depolar ve olayını tetikleyen Error
gerçek özel durum olup olmadığını lastErrorWrapper
(HTTP tabanlı özel durumlar söz konusu olduğunda) veya yalnızca isteği işlerken oluşan bir özel durum için sarmalayıcı olup olmadığını denetler.
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Get the error details
Dim lastErrorWrapper As HttpException = _
CType(Server.GetLastError(), HttpException)
Dim lastError As Exception = lastErrorWrapper
If lastErrorWrapper.InnerException IsNot Nothing Then
lastError = lastErrorWrapper.InnerException
End If
Dim lastErrorTypeName As String = lastError.GetType().ToString()
Dim lastErrorMessage As String = lastError.Message
Dim lastErrorStackTrace As String = lastError.StackTrace
End Sub
Bu noktada, özel durumun ayrıntılarını bir veritabanı tablosuna kaydedecek kod yazmak için ihtiyacınız olan tüm bilgilere sahip olursunuz. İstenen sayfanın URL'si ve oturum açmış durumdaki kullanıcının adı gibi diğer yararlı bilgi parçalarıyla birlikte, ilgilendiğiniz hata ayrıntılarının her biri (tür, ileti, yığın izleme vb.) sütunlarını içeren bir veritabanı tablosu oluşturabilirsiniz. Olay işleyicisinde Application_Error
veritabanına bağlanır ve tabloya bir kayıt eklersiniz. Benzer şekilde, e-posta yoluyla bir geliştiriciyi hatayla ilgili uyarmak için kod ekleyebilirsiniz.
Sonraki iki öğreticide incelenen hata günlüğü kitaplıkları bu tür işlevleri kullanıma sunar, bu nedenle bu hata günlüğünü oluşturmanıza ve bildirimi kendiniz oluşturmanıza gerek yoktur. Ancak, olayın tetiklendiğini ve olay işleyicisinin Application_Error
hata ayrıntılarını günlüğe kaydetmek ve bir geliştiriciyi bilgilendirmek için kullanılabileceğini göstermek Error
için bir hata oluştuğunda geliştiriciye bildirimde bulunan kod ekleyelim.
İşlenmeyen Bir Özel Durum Oluştuğunda Geliştiriciye Bildirme
Üretim ortamında işlenmeyen bir özel durum oluştuğunda, hatayı değerlendirebilmeleri ve hangi eylemlerin yapılması gerektiğini belirleyebilmeleri için geliştirme ekibini uyarmak önemlidir. Örneğin, veritabanına bağlanırken bir hata varsa bağlantı dizesi iki kez denetlemeniz ve belki de web barındırma şirketinizle bir destek bileti açmanız gerekir. Bir programlama hatası nedeniyle özel durum oluştuysa, gelecekte bu tür hataları önlemek için ek kod veya doğrulama mantığı eklenmesi gerekebilir.
Ad alanı içindeki System.Net.Mail
.NET Framework sınıfları, e-posta göndermeyi kolaylaştırır. MailMessage
sınıfı bir e-posta iletisini temsil eder ve , From
, Subject
, Body
ve Attachments
gibi To
özelliklere sahiptir. SmtpClass
belirtilen SMTP sunucusunu kullanarak bir MailMessage
nesne göndermek için kullanılır; SMTP sunucusu ayarları içindeki öğesinde <system.net>
Web.config file
programlı veya bildirimli olarak belirtilebilir. ASP.NET bir uygulamada e-posta iletileri gönderme hakkında daha fazla bilgi için ASP.NET Web Sayfaları Sitesinden E-posta Gönderme ve System.Net.Mail makaleme göz atın.
Not
öğesi, <system.net>
e-posta gönderirken sınıfı tarafından SmtpClient
kullanılan SMTP sunucusu ayarlarını içerir. Web barındırma şirketinizin büyük olasılıkla uygulamanızdan e-posta göndermek için kullanabileceğiniz bir SMTP sunucusu vardır. Web uygulamanızda kullanmanız gereken SMTP sunucusu ayarları hakkında bilgi için web barındırma sağlayıcınızın destek bölümüne bakın.
Hata oluştuğunda Application_Error
geliştiriciye e-posta göndermek için olay işleyicisine aşağıdaki kodu ekleyin:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Get the error details
Dim lastErrorWrapper As HttpException = _
CType(Server.GetLastError(), HttpException)
Dim lastError As Exception = lastErrorWrapper
If lastErrorWrapper.InnerException IsNot Nothing Then
lastError = lastErrorWrapper.InnerException
End If
Dim lastErrorTypeName As String = lastError.GetType().ToString()
Dim lastErrorMessage As String = lastError.Message
Dim lastErrorStackTrace As String = lastError.StackTrace
Const ToAddress As String = "support@example.com"
Const FromAddress As String = "support@example.com"
Const Subject As String = "An Error Has Occurred!"
' Create the MailMessage object
Dim mm As New MailMessage(FromAddress, ToAddress)
mm.Subject = Subject
mm.IsBodyHtml = True
mm.Priority = MailPriority.High
mm.Body = string.Format( _
"<html>" & vbCrLf & _
" <body>" & vbCrLf & _
" <h1>An Error Has Occurred!</h1>" & vbCrLf & _
" <table cellpadding=""5"" cellspacing=""0"" border=""1"">" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">URL:</td>" & vbCrLf & _
" <td>{0}</td>" & vbCrLf & _
" </tr>" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">User:</td>" & vbCrLf & _
" <td>{1}</td>" & vbCrLf & _
" </tr>" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">Exception Type:</td>" & vbCrLf & _
" <td>{2}</td>" & vbCrLf & _
" </tr>" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">Message:</td>" & vbCrLf & _
" <td>{3}</td>" & vbCrLf & _
" </tr>" & vbCrLf & _
" <tr>" & vbCrLf & _
" <tdtext-align: right;font-weight: bold"">Stack Trace:</td>" & vbCrLf & _
" <td>{4}</td>" & vbCrLf & _
" </tr> " & vbCrLf & _
" </table>" & vbCrLf & _
" </body>" & vbCrLf & _
"</html>", _
Request.RawUrl, _
User.Identity.Name, _
lastErrorTypeName, _
lastErrorMessage, _
lastErrorStackTrace.Replace(Environment.NewLine, "<br />"))
'Attach the Yellow Screen of Death for this error
Dim YSODmarkup As String = lastErrorWrapper.GetHtmlErrorMessage()
If Not String.IsNullOrEmpty(YSODmarkup) Then
Dim YSOD As Attachment = _
Attachment.CreateAttachmentFromString(YSODmarkup, "YSOD.htm")
mm.Attachments.Add(YSOD)
End If
' Send the email
Dim smtp As New SmtpClient()
smtp.Send(mm)
End Sub
Yukarıdaki kod oldukça uzun olsa da, büyük kısmı geliştiriciye gönderilen e-postada görünen HTML'yi oluşturur. Kod, yöntemilastErrorWrapper
() tarafından döndürülene GetLastError
başvurarak HttpException
başlar. İstek tarafından tetiklenen gerçek özel durum aracılığıyla lastErrorWrapper.InnerException
alınır ve değişkenine lastError
atanır. Tür, ileti ve yığın izleme bilgileri üç dize değişkeninden lastError
alınır ve depolanır.
Ardından adlı mm
bir MailMessage
nesne oluşturulur. E-posta gövdesi HTML biçimindedir ve istenen sayfanın URL'sini, oturum açmış durumdaki kullanıcının adını ve özel durum hakkındaki bilgileri (tür, ileti ve yığın izleme) görüntüler. Sınıfıyla ilgili HttpException
en önemli şeylerden biri, GetHtmlErrorMessage yöntemini çağırarak Özel Durum Ayrıntıları Sarı Ölüm Ekranı 'nı (YSOD) oluşturmak için kullanılan HTML'yi oluşturabilmenizdir. Bu yöntem burada Özel Durum Ayrıntıları YSOD işaretlemesini almak ve e-postaya ek olarak eklemek için kullanılır. Dikkatli olun: Olayı tetikleyen Error
özel durum HTTP tabanlı bir özel durumsa (var olmayan bir sayfaya yönelik istek gibi) GetHtmlErrorMessage
yöntemi döndürür null
.
Son adım göndermektir MailMessage
. Bu, yeni SmtpClient
bir yöntem oluşturup yöntemini çağırarak Send
yapılır.
Not
Bu kodu web uygulamanızda kullanmadan önce ve FromAddress
sabitlerindeki ToAddress
support@example.com değerleri, hata bildirimi e-postasının gönderilmesi ve kaynaklanması gereken e-posta adresiyle değiştirmek istersiniz. ayrıca içindeki bölümünde Web.config
SMTP sunucusu ayarlarını <system.net>
belirtmeniz gerekir. Kullanılacak SMTP sunucusu ayarlarını belirlemek için web barındırma sağlayıcınıza başvurun.
Bu kod her hata olduğunda geliştiriciye hatayı özetleyen ve YSOD'yi içeren bir e-posta iletisi gönderilir. Önceki öğreticide, Genre.aspx ziyaret ederek ve gibi Genre.aspx?ID=foo
sorgu dizesi aracılığıyla geçersiz ID
bir değer geçirerek bir çalışma zamanı hatası gösterdik. Dosyanın olduğu sayfayı Global.asax
ziyaret etmek, önceki öğreticidekiyle aynı kullanıcı deneyimini oluşturur. Geliştirme ortamında Özel Durum Ayrıntıları Sarı Ölüm Ekranı'nı görmeye devam ederken üretim ortamında özel hata sayfasını görürsünüz. Bu mevcut davranışa ek olarak geliştiriciye bir e-posta gönderilir.
Şekil 2'de ziyaret ederken alınan e-posta gösterilmektedir Genre.aspx?ID=foo
. E-posta gövdesi özel durum bilgilerini özetlerken YSOD.htm
ek, Özel Durum Ayrıntıları YSOD'de gösterilen içeriği görüntüler (bkz . Şekil 3).
Şekil 2: İşlenmeyen bir özel durum olduğunda geliştiriciye bir e-posta bildirimi gönderilir
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 3: E-posta Bildirimi, Özel Durum Ayrıntıları YSOD'yi ek olarak içerir
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Özel Hata Sayfasını Kullanmaya Ne Dersin?
Bu öğreticide, işlenmeyen bir özel durum oluştuğunda Application_Error
kodu yürütmek için ve olay işleyicisinin nasıl kullanılacağı Global.asax
gösterildi. Özellikle, bir geliştiriciye bir hatayı bildirmek için bu olay işleyicisini kullandık; hata ayrıntılarını da veritabanında günlüğe kaydedecek şekilde genişletebiliriz. Olay işleyicisinin Application_Error
varlığı son kullanıcının deneyimini etkilemez. Hata Ayrıntıları YSOD, Çalışma Zamanı Hatası YSOD veya özel hata sayfası gibi yapılandırılmış hata sayfasını görmeye devam ederler.
Özel bir hata sayfası kullanılırken dosyanın ve Application_Error
olayın gerekli olup olmadığını Global.asax
merak etmek doğaldır. Bir hata oluştuğunda kullanıcıya özel hata sayfası gösterilir, bu nedenle neden geliştiriciyi bilgilendirmek ve hata ayrıntılarını özel hata sayfasının arka kod sınıfına kaydetmek için kodu koyamıyoruz? Özel hata sayfasının arka planda kod sınıfına kod ekleyebilirsiniz ancak önceki öğreticide incelediğimiz tekniği kullanırken olayı tetikleyen Error
özel durumun ayrıntılarına erişiminiz yoktur. GetLastError
Yöntemini özel hata sayfasından çağırmak döndürürNothing
.
Bu davranışın nedeni, özel hata sayfasına yeniden yönlendirme yoluyla ulaşılıyor olmasıdır. İşlenmeyen bir özel durum ASP.NET çalışma zamanına ulaştığında, ASP.NET altyapısı olayını başlatır Error
(olay işleyicisini yürütürApplication_Error
) ve ardından bir Response.Redirect(customErrorPageUrl)
vererek kullanıcıyı özel hata sayfasına yönlendirir. Response.Redirect
yöntemi, istemciye HTTP 302 durum koduyla bir yanıt gönderir ve tarayıcıya özel hata sayfası olarak yeni bir URL istemesi talimatını gönderir. Ardından tarayıcı bu yeni sayfayı otomatik olarak istemektedir. Tarayıcının Adres çubuğu özel hata sayfası URL'sine değiştiğinden özel hata sayfasının hatanın kaynaklandığı sayfadan ayrı olarak istendiğini anlayabilirsiniz (bkz . Şekil 4).
Şekil 4: Bir Hata Oluştuğunda Tarayıcı Özel Hata Sayfası URL'sine Yeniden Yönlendirilir
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Net etki, sunucu HTTP 302 yeniden yönlendirmesiyle yanıtladığında işlenmeyen özel durumun oluştuğu isteğin sona ermesidir. Özel hata sayfasına yapılan sonraki istek yepyeni bir istektir; Bu noktada ASP.NET altyapısı hata bilgilerini atmıştır ve ayrıca önceki istekteki işlenmeyen özel durumu özel hata sayfası için yeni istekle ilişkilendirmenin bir yolu yoktur. Bu nedenle GetLastError
özel hata sayfasından çağrıldığında döndürülüyor null
.
Ancak, hataya neden olan istek sırasında özel hata sayfasının yürütülmesi mümkündür. yöntemi, Server.Transfer(url)
yürütmeyi belirtilen URL'ye aktarır ve aynı istek içinde işler. Olay işleyicisindeki Application_Error
kodu özel hata sayfasının arka planda kod sınıfına taşıyabilir ve içindeki Global.asax
kodu aşağıdaki kodla değiştirebilirsiniz:
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Get the error details
Dim lastErrorWrapper As HttpException = _
CType(Server.GetLastError(), HttpException)
If lastErrorWrapper.GetHttpCode() = 404 Then
Server.Transfer("~/ErrorPages/404.aspx")
Else
Server.Transfer("~/ErrorPages/Oops.aspx")
End If
End Sub
İşlenmeyen bir özel durum oluştuğunda Application_Error
, olay işleyicisi denetimi HTTP durum koduna göre uygun özel hata sayfasına aktarır. Denetim aktarıldığı için özel hata sayfası aracılığıyla Server.GetLastError
işlenmeyen özel durum bilgilerine erişebilir ve bir geliştiriciye hatayı bildirebilir ve ayrıntılarını günlüğe kaydedebilir. Çağrı, Server.Transfer
ASP.NET altyapısının kullanıcıyı özel hata sayfasına yönlendirmesini durdurur. Bunun yerine özel hata sayfasının içeriği, hatayı oluşturan sayfaya yanıt olarak döndürülür.
Özet
bir ASP.NET web uygulamasında işlenmeyen bir özel durum oluştuğunda, ASP.NET çalışma zamanı olayı başlatır Error
ve yapılandırılan hata sayfasını görüntüler. Hata için bir olay işleyicisi oluşturarak hatayı geliştiriciye bildirebilir, ayrıntılarını günlüğe kaydedebilir veya başka bir şekilde işleyebiliriz. Olaylar için HttpApplication
Error
olay işleyicisi oluşturmanın Global.asax
iki yolu vardır: dosyasında veya http modülünden. Bu öğreticide, e-posta iletisi yoluyla geliştiricilere hata bildiren dosyada Global.asax
bir olay işleyicisinin nasıl oluşturulacağı Error
gösterildi.
İşlenmeyen özel durumları benzersiz veya özelleştirilmiş bir Error
şekilde işlemeniz gerekiyorsa olay işleyicisi oluşturmak yararlıdır. Ancak, özel durumu günlüğe kaydetmek veya bir geliştiriciyi bilgilendirmek için kendi Error
olay işleyicinizi oluşturmak, dakikalar içinde ayarlanabilen ücretsiz ve kullanımı kolay hata günlüğü kitaplıkları mevcut olduğundan zamanınızın en verimli kullanımı değildir. Sonraki iki öğreticide bu tür iki kitaplık incelenir.
Mutlu Programlama!
Daha Fazla Bilgi
Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
- HTTP Modüllerine ve HTTP İşleyicilerine Genel Bakış ASP.NET
- İşlenmeyen Özel Durumlara Düzgün Yanıt Verme - İşlenmeyen Özel Durumları İşleme
HttpApplication
Sınıf ve ASP.NET Uygulama Nesnesi- ASP.NET'da HTTP İşleyicileri ve HTTP Modülleri
- ASP.NET'de E-posta Gönderme
Global.asax
Dosyayı Anlama- Takılabilir ASP.NET Bileşenleri Oluşturmak için HTTP Modüllerini ve İşleyicilerini Kullanma
- ASP.NET
Global.asax
Dosyasıyla Çalışma - Örneklerle
HttpApplication
Çalışma