Özel Hata Sayfası Görüntüleme (VB)
tarafından Scott Mitchell
ASP.NET web uygulamasında çalışma zamanı hatası oluştuğunda kullanıcı ne görür? Yanıt, web sitesinin <customErrors> yapılandırmasına bağlıdır. Varsayılan olarak, kullanıcılara çalışma zamanı hatası oluştuğu bildirilmiş, çirkin bir sarı ekran gösterilir. Bu öğreticide, sitenizin görünüm ve hissi ile eşleşen estetik açıdan hoş bir özel hata sayfası görüntülemek için bu ayarların nasıl özelleştirileceği gösterilmektedir.
Giriş
Mükemmel bir dünyada çalışma zamanı hataları olmazdı. Programcılar bir hatayla ve güçlü kullanıcı girişi doğrulamasıyla kod yazar ve veritabanı sunucuları ve e-posta sunucuları gibi dış kaynaklar hiçbir zaman çevrimdışı olmaz. Elbette, gerçekte hatalar kaçınılmazdır. .NET Framework sınıflar özel durum oluşturarak hata sinyali veriyor. Örneğin, bir SqlConnection nesnesinin Open yöntemini çağırmak, bir bağlantı dizesi tarafından belirtilen veritabanına bir bağlantı oluşturur. Ancak veritabanı kapalıysa veya bağlantı dizesindeki kimlik bilgileri geçersizse Open yöntemi bir SqlException
oluşturur. Özel durumlar blokların Try/Catch/Finally
kullanımıyla işlenebilir. Blok Try
içindeki kod bir özel durum oluşturursa, denetim geliştiricinin hatadan kurtarmayı deneyebileceği uygun catch bloğuna aktarılır. Eşleşen catch bloğu yoksa veya özel durumu oluşturan kod bir deneme bloğunda değilse, özel durum blok aramasında çağrı yığınını Try/Catch/Finally
ayırır.
Özel durum işlenmeden ASP.NET çalışma zamanına kadar kabarırsa, sınıfınHttpApplication
Error
olayı oluşturulur ve yapılandırılan hata sayfası görüntülenir. Varsayılan olarak, ASP.NET sevgiyle Ölümün Sarı Ekranı (YSOD) olarak adlandırılan bir hata sayfası görüntüler. YSOD'nin iki sürümü vardır: biri özel durum ayrıntılarını, bir yığın izlemesini ve uygulamada hata ayıklayan geliştiricilere yardımcı olan diğer bilgileri gösterir (bkz . Şekil 1); diğer basitçe bir çalışma zamanı hatası olduğunu belirtir (bkz . Şekil 2).
YSOD'nin ayrıntıları, uygulamada hata ayıklayan geliştiriciler için oldukça yararlıdır, ancak son kullanıcılara bir YSOD göstermek çok basit ve profesyonel değildir. Bunun yerine, son kullanıcılar sitenin görünümünü ve hissini koruyan bir hata sayfasına alınmalıdır ve bu durum daha kullanıcı dostu bir şekilde açıklanmalıdır. İyi haber, böyle bir özel hata sayfası oluşturmanın oldukça kolay olmasıdır. Bu öğretici, ASP'ye bir bakışla başlar. NET'in farklı hata sayfaları. Daha sonra, kullanıcılara hata karşısında özel bir hata sayfası göstermek için web uygulamasının nasıl yapılandırılıp yapılandırılması gösterilmektedir.
Üç Tür Hata Sayfasını inceleme
bir ASP.NET uygulamasında işlenmeyen bir özel durum ortaya çıktığında üç tür hata sayfasından biri görüntülenir:
- Özel Durum Ayrıntıları Sarı Ölüm Ekranı hata sayfası,
- Çalışma Zamanı Hatası Sarı Ölüm hatası sayfası veya
- Özel hata sayfası
Geliştiricilerin en çok bildiği hata sayfası Özel Durum Ayrıntıları YSOD'dır. Varsayılan olarak, bu sayfa yerel olarak ziyaret eden kullanıcılara görüntülenir ve bu nedenle geliştirme ortamında siteyi test ederken bir hata oluştuğunda gördüğünüz sayfadır. Adından da anlaşılacağı gibi, Özel Durum Ayrıntıları YSOD özel durum hakkında ayrıntılar sağlar: tür, ileti ve yığın izleme. Dahası, özel durum ASP.NET sayfanızın arka kod sınıfındaki kod tarafından oluşturulduysa ve uygulama hata ayıklama için yapılandırıldıysa, Özel Durum Ayrıntıları YSOD'da da bu kod satırı (ve bunun üstünde ve altında birkaç kod satırı) gösterilir.
Şekil 1'de Özel Durum Ayrıntıları YSOD sayfası gösterilmektedir. Tarayıcının adres penceresindeki URL'ye dikkat edin: http://localhost:62275/Genre.aspx?ID=foo
. Sayfada kitap incelemelerinin belirli bir türdeki listelendiğini Genre.aspx
hatırlayın. (auniqueidentifier
) değerinin GenreId
querystring üzerinden geçirilmesini gerektirir; örneğin, kurgusal incelemeleri görüntülemek için uygun URL'dirGenre.aspx?ID=7683ab5d-4589-4f03-a139-1c26044d0146
. Olmayan biruniqueidentifier
değer querystring aracılığıyla geçirilirse ("foo" gibi) bir özel durum oluşturulur.
Not
Bu hatayı indirilebilen tanıtım web uygulamasında yeniden oluşturmak için doğrudan ziyaret Genre.aspx?ID=foo
edebilir veya içindeki "Çalışma Zamanı Hatası Oluştur" bağlantısına Default.aspx
tıklayabilirsiniz.
Şekil 1'de sunulan özel durum bilgilerine dikkat edin. Sayfanın üst kısmında "Karakter dizesinden uniqueidentifier'a dönüştürülürken dönüştürme başarısız oldu" özel durum iletisi bulunur. Özel durumun türü de System.Data.SqlClient.SqlException
listelenir. Ayrıca yığın izlemesi de vardır.
Şekil 1: Özel Durum Ayrıntıları YSOD, Özel Durum Hakkındaki Bilgileri Içerir
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Diğer YSOD türü Çalışma Zamanı Hatası YSOD'dır ve Şekil 2'de gösterilir. Çalışma Zamanı Hatası YSOD, ziyaretçiyi bir çalışma zamanı hatası oluştuğu konusunda bilgilendirse de, oluşan özel durum hakkında herhangi bir bilgi içermez. (Ancak, bu tür bir YSOD'nin profesyonelce görünmemesini sağlayan dosyanın bir parçası olan dosyayı değiştirerek Web.config
hata ayrıntılarının nasıl görüntülenebilir hale getirileceğine ilişkin yönergeler sağlar.)
Varsayılan olarak, Çalışma Zamanı Hatası YSOD, tarayıcının Şekil 2'deki Adres çubuğundaki URL tarafından kanıtlandığından uzaktan (aracılığıylahttp://www.yoursite.com) ziyaret eden kullanıcılara gösterilir: http://httpruntime.web703.discountasp.net/Genre.aspx?ID=foo
. geliştiriciler hata ayrıntılarını bilmekle ilgilendiğinden iki farklı YSOD ekranı vardır, ancak bu tür bilgiler sitenizi ziyaret eden herkese olası güvenlik açıklarını veya diğer hassas bilgileri gösterebileceğinden canlı bir sitede gösterilmemelidir.
Not
Takip ediyorsanız ve web barındırma sağlayıcınız olarak DiscountASP.NET kullanıyorsanız, canlı siteyi ziyaret ederken Çalışma Zamanı Hatası YSOD'nin görüntülenmediğini fark edebilirsiniz. Bunun nedeni, DiscountASP.NET sunucularının varsayılan olarak Özel Durum Ayrıntıları YSOD'sini gösterecek şekilde yapılandırılmış olmasıdır. İyi haber, dosyanıza Web.config
bir <customErrors>
bölüm ekleyerek bu varsayılan davranışı geçersiz kılabilmenizdir. "Hangi Hata Sayfasının Görüntüleneceğini Yapılandırma" bölümü bölümü ayrıntılı olarak inceler <customErrors>
.
Şekil 2: Çalışma Zamanı Hatası YSOD Hiçbir Hata Ayrıntısı Içermiyor
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Üçüncü hata sayfası türü, oluşturduğunuz bir web sayfası olan özel hata sayfasıdır. Özel hata sayfasının avantajı, sayfanın görünümüyle birlikte kullanıcıya görüntülenen bilgiler üzerinde tam denetime sahip olmanızdır; özel hata sayfası, diğer sayfalarınızla aynı ana sayfayı ve stilleri kullanabilir. "Özel Hata Sayfası Kullanma" bölümü, özel bir hata sayfası oluşturma ve işlenmeyen bir özel durum durumunda görüntülenecek şekilde yapılandırma adımlarını gösterir. Şekil 3 ' te bu özel hata sayfasının en üst noktası gösterilmektedir. Gördüğünüz gibi, hata sayfasının görünümü ve hissi, Şekil 1 ve 2'de gösterilen Sarı Ölüm Ekranlarından herhangi birinden çok daha profesyonel görünümlüdür.
Şekil 3: Özel Hata Sayfası Daha Özel Bir Görünüm ve Görünüm Sunar
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Şekil 3'te tarayıcının Adres çubuğunu incelemek için biraz zaman ayırın. Adres çubuğunda özel hata sayfasının (/ErrorPages/Oops.aspx
) URL'sinin gösterildiğini unutmayın. Şekil 1 ve 2'de Ölümün Sarı Ekranları, hatanın kaynaklandığıGenre.aspx
() ile aynı sayfada gösterilir. Özel hata sayfası, querystring parametresi aracılığıyla hatanın oluştuğu sayfanın URL'sine aspxerrorpath
geçirilir.
Hangi Hata Sayfasının Görüntüleneceğini Yapılandırma
Üç olası hata sayfasından hangisi iki değişkeni temel alır:
- bölümündeki yapılandırma bilgileri
<customErrors>
ve - Kullanıcının siteyi yerel olarak veya uzaktan ziyaret edip etmediği.
<customErrors>
içindeki Web.config
bölümünde hangi hata sayfasının gösterildiğini etkileyen iki öznitelik vardır: defaultRedirect
ve mode
. defaultRedirect
özniteliği isteğe bağlıdır. Sağlanırsa, özel hata sayfasının URL'sini belirtir ve özel hata sayfasının Çalışma Zamanı Hatası YSOD yerine gösterilmesi gerektiğini belirtir. mode
özniteliği gereklidir ve üç değerden birini kabul eder: On
, Off
, veya RemoteOnly
. Bu değerler aşağıdaki davranışa sahiptir:
On
- Özel hata sayfasının veya Çalışma Zamanı Hatası YSOD'nin yerel veya uzak olup olmadıklarına bakılmaksızın tüm ziyaretçilere gösterildiğini gösterir.Off
- Özel Durum Ayrıntıları YSOD'sinin yerel veya uzak olup olmadıklarına bakılmaksızın tüm ziyaretçilere görüntüleneceğini belirtir.RemoteOnly
- Özel hata sayfasının veya Çalışma Zamanı Hatası YSOD'nin uzak ziyaretçilere, Özel Durum Ayrıntıları YSOD'sinin ise yerel ziyaretçilere gösterildiğini gösterir.
Aksini belirtmediğiniz sürece, ASP.NET mode özniteliğini RemoteOnly
olarak ayarlamış ve bir defaultRedirect
değer belirtmemişsiniz gibi davranır. Başka bir deyişle varsayılan davranış, Uzak ziyaretçilere Çalışma Zamanı Hatası YSOD gösterilirken Özel Durum Ayrıntıları YSOD'sinin yerel ziyaretçilere görüntülenmesidir. Web uygulamanızın uygulamasına bir <customErrors>
bölüm ekleyerek bu varsayılan davranışı geçersiz kılabilirsiniz Web.config file.
Özel Hata Sayfası Kullanma
Her web uygulamasının özel bir hata sayfası olmalıdır. Çalışma Zamanı Hatası YSOD'ye daha profesyonel görünümlü bir alternatif sağlar, oluşturulması kolaydır ve uygulamayı özel hata sayfasını kullanacak şekilde yapılandırmak yalnızca birkaç dakika sürer. İlk adım, özel hata sayfasını oluşturmaktır. Kitap İncelemeleri uygulamasına adlı ErrorPages
yeni bir klasör ekledim ve bu klasöre adlı Oops.aspx
yeni bir ASP.NET sayfası ekledim. Sayfanın, sitenizdeki diğer sayfalarla aynı ana sayfayı kullanmasını sağlayın, böylece aynı genel görünümü otomatik olarak devralır.
Şekil 4: Özel Hata Sayfası Oluşturma
Ardından, hata sayfasının içeriğini oluşturmak için birkaç dakikanızı ayırın. Beklenmeyen bir hata olduğunu ve sitenin giriş sayfasına bir bağlantı olduğunu belirten bir ileti içeren oldukça basit bir özel hata sayfası oluşturdum.
Şekil 5: Özel Hata Sayfanızı Tasarlama
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Hata sayfası tamamlandıysa, web uygulamasını Çalışma Zamanı Hatası YSOD yerine özel hata sayfasını kullanacak şekilde yapılandırın. Bu, bölümün özniteliğinde hata sayfasının URL'si <customErrors>
defaultRedirect
belirtilerek gerçekleştirilir. Uygulamanızın Web.config
dosyasına aşağıdaki işaretlemeyi ekleyin:
<configuration>
...
<system.web>
<customErrors mode="RemoteOnly"
defaultRedirect="~/ErrorPages/Oops.aspx" />
...
</system.web>
</configuration>
Yukarıdaki işaretleme, uygulamayı, uzaktan ziyaret eden kullanıcılar için Oops.aspx özel hata sayfasını kullanırken yerel olarak ziyaret eden kullanıcılara Özel Durum Ayrıntıları YSOD'sini gösterecek şekilde yapılandırılır. Bunu uygulamada görmek için web sitenizi üretim ortamına dağıtın ve ardından geçersiz bir querystring değeriyle canlı sitedeki Genre.aspx sayfasını ziyaret edin. Özel hata sayfasını görmeniz gerekir ( Şekil 3'e geri bakın).
Özel hata sayfasının yalnızca uzak kullanıcılara gösterildiğini doğrulamak için geliştirme ortamından geçersiz sorgu dizesi içeren sayfayı ziyaret edin Genre.aspx
. Özel Durum Ayrıntıları YSOD'sini görmeye devam etmelisiniz ( Şekil 1'e geri bakın). Bu RemoteOnly
ayar, üretim ortamında siteyi ziyaret eden kullanıcıların özel hata sayfasını görmesini sağlarken, yerel olarak çalışan geliştiriciler özel durumun ayrıntılarını görmeye devam eder.
Geliştiricilere Bildirme ve Hata Ayrıntılarını Günlüğe Kaydetme
Geliştirme ortamında oluşan hatalar, geliştiricinin bilgisayarında oturması nedeniyle oluştu. Özel Durum Ayrıntıları YSOD'da özel durumun bilgileri gösterilir ve hata oluştuğunda hangi adımları gerçekleştirdiğini bilir. Ancak üretimde bir hata oluştuğunda geliştirici, siteyi ziyaret eden son kullanıcı hatayı bildirmeye zaman ayırmadığı sürece bir hatanın oluştuğundan haberdar olmaz. Ayrıca kullanıcı geliştirme ekibini hata oluştuğu konusunda uyarmak için yola çıksa bile özel durum türünü, iletiyi ve yığın izlemesini bilmeden hatanın nedenini tanılamak, düzeltmeyi bırak da zor olabilir.
Bu nedenlerden dolayı üretim ortamındaki herhangi bir hatanın kalıcı bir depoya (veritabanı gibi) günlüğe kaydedilmesi ve geliştiricilerin bu hatayla ilgili olarak uyarılması çok önemlidir. Özel hata sayfası bu günlüğü ve bildirimi yapmak için iyi bir yer gibi görünebilir. Ne yazık ki özel hata sayfasının hata ayrıntılarına erişimi yoktur ve bu nedenle bu bilgileri günlüğe kaydetmek için kullanılamaz. İyi haber, hata ayrıntılarını kesmenin ve günlüğe kaydetmenin çeşitli yolları vardır ve sonraki üç öğreticide bu konu daha ayrıntılı olarak incelenir.
Farklı HTTP Hata Durumları için Farklı Özel Hata Sayfaları Kullanma
Bir ASP.NET sayfası tarafından özel durum oluşturulduğunda ve işlenmediğinde, özel durum yapılandırılan hata sayfasını görüntüleyen ASP.NET çalışma zamanına kadar geçerlidir. bir istek ASP.NET altyapısına geliyor ancak herhangi bir nedenle işlenemediyse (istenen dosya bulunamadı veya Dosya için Okuma izinleri devre dışı bırakılmış olabilir) ASP.NET altyapısı bir HttpException
oluşturur. ASP.NET sayfalardan oluşan özel durumlar gibi bu özel durum da çalışma zamanına kadar kabarcıklar oluşturur ve uygun hata sayfasının görüntülenmesine neden olur.
Bunun üretimdeki web uygulaması için anlamı, bir kullanıcı bulunamaz bir sayfa isterse özel hata sayfasını görmesidir. Şekil 6'da böyle bir örnek gösterilmektedir. İstek var olmayan bir sayfaya ()NoSuchPage.aspx
yönelik olduğundan, bir HttpException
oluşturulur ve özel hata sayfası görüntülenir (querystring parametresinde başvurusuna NoSuchPage.aspx
aspxerrorpath
dikkat edin).
Şekil 6: ASP.NET Çalışma Zamanı, Geçersiz bir İsteğe Yanıt Olarak Yapılandırılan Hata Sayfasını Görüntüler
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Varsayılan olarak, tüm hata türleri aynı özel hata sayfasının görüntülenmesine neden olur. Ancak, bölümdeki <customErrors>
alt öğeleri kullanarak <error>
belirli bir HTTP durum kodu için farklı bir özel hata sayfası belirtebilirsiniz. Örneğin, HTTP durum kodu 404 olan bir sayfanın bulunamadı hatası durumunda farklı bir hata sayfası görüntülenmesi için, bölümü aşağıdaki işaretlemeyi içerecek şekilde güncelleştirin <customErrors>
:
<customErrors mode="RemoteOnly" defaultRedirect="~/ErrorPages/Oops.aspx">
<error statusCode="404" redirect="~/ErrorPages/404.aspx" />
</customErrors>
Bu değişiklik gerçekleştiğinde, ziyaret eden bir kullanıcı uzaktan var olmayan bir ASP.NET kaynağı istediğinde, yerine özel hata sayfasına Oops.aspx
yönlendirilir404.aspx
. Şekil 7'de gösterildiği gibi, 404.aspx
sayfa genel özel hata sayfasından daha belirli bir ileti içerebilir.
Not
Etkili 404 hata sayfaları oluşturma yönergeleri için 404 Hata Sayfaları, Bir Kez Daha gözden geçirin.
Şekil 7: Özel 404 Hata Sayfası, Oops.aspx
(Tam boyutlu görüntüyü görüntülemek için tıklayın)
Sayfaya 404.aspx
yalnızca kullanıcı bulunamadı bir sayfa için istekte bulunduğunda ulaşıldığını bildiğiniz için, bu özel hata sayfasını, kullanıcının bu tür bir hatayı ele almasına yardımcı olacak işlevleri içerecek şekilde geliştirebilirsiniz. Örneğin, bilinen hatalı URL'leri iyi URL'lerle eşleyen bir veritabanı tablosu oluşturabilir ve özel 404.aspx
hata sayfasının bu tabloya karşı bir sorgu çalıştırmasını ve kullanıcının erişmeye çalışabileceği sayfaları önermesini sağlayabilirsiniz.
Not
Özel hata sayfası yalnızca ASP.NET altyapısı tarafından işlenen bir kaynağa istek yapıldığında görüntülenir. IIS ile ASP.NET Geliştirme Sunucusu Arasındaki Temel Farklar öğreticisinde ele aldığımız gibi, web sunucusu belirli isteklerin kendisini işleyebilir. Varsayılan olarak, IIS web sunucusu ASP.NET altyapısını çağırmadan görüntüler ve HTML dosyaları gibi statik içerik isteklerini işler. Sonuç olarak, kullanıcı mevcut olmayan bir görüntü dosyası isterse, ASP yerine IIS'nin varsayılan 404 hata iletisini geri alır. NET'in yapılandırılmış hata sayfası.
Özet
bir ASP.NET uygulamasında işlenmeyen bir özel durum oluştuğunda, kullanıcıya üç hata sayfasından biri gösterilir: Özel Durum Ayrıntıları Sarı Ölüm Ekranı; Çalışma Zamanı Hatası Sarı Ölüm Ekranı; veya özel bir hata sayfası. Hangi hata sayfasının görüntüleneceği, uygulamanın <customErrors>
yapılandırmasına ve kullanıcının yerel olarak mı yoksa uzaktan mı ziyaret ettiğine bağlıdır. Varsayılan davranış, yerel ziyaretçilere Özel Durum Ayrıntıları YSOD'sini ve uzak ziyaretçilere Çalışma Zamanı Hatası YSOD'yi göstermektir.
Çalışma Zamanı Hatası YSOD, siteyi ziyaret eden kullanıcıdan hassas olabilecek hata bilgilerini gizlese de, sitenizin görünüm ve hissi bozulur ve uygulamanızın buggy görünmesini sağlar. Daha iyi bir yaklaşım, özel hata sayfası oluşturup tasarlamayı ve bölümün defaultRedirect
özniteliğinde URL'sini belirtmeyi kapsayan <customErrors>
özel bir hata sayfası kullanmaktır. Farklı HTTP hata durumları için birden çok özel hata sayfanız bile olabilir.
Özel hata sayfası, üretim ortamındaki bir web sitesi için kapsamlı bir hata işleme stratejisinin ilk adımıdır. Hatanın geliştiricisini uyarmak ve ayrıntılarını günlüğe kaydetmek de önemli adımlardır. Sonraki üç öğreticide hata bildirimi ve günlüğe kaydetme tekniklerini inceler.
Mutlu Programlama!
Daha Fazla Bilgi
Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
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