Ö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 SqlExceptionoluş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ınHttpApplicationError 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.aspxtı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.SqlExceptionlistelenir. Ayrıca yığın izlemesi de vardır.

Özel durum hakkındaki bilgileri gösteren ekran görüntüsü.

Ş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> .

Çalışma zamanı hatası YSOD'nin hiçbir hata ayrıntısı içermediğini gösteren ekran görüntüsü.

Ş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.

Daha özel bir genel görünüm sunmak için oluşturabileceğiniz özel hata sayfasını gösteren ekran görüntüsü.

Ş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.aspxyeni 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.

Oops nokta a s p x dosyasını içeren ErrorPages klasörünü gösteren ekran görüntüsü.

Ş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.

Kendi özel hata sayfanızı nasıl tasarlayabileceğinizi gösteren ekran görüntüsü.

Ş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 HttpExceptionoluş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.aspxaspxerrorpath dikkat edin).

Görüntülenen yapılandırılmış hata sayfasını gösteren ekran görüntüsü.Ş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.aspxyönlendirilir404.aspx. Şekil 7'de gösterildiği gibi, 404.aspx sayfa genel özel hata sayfasından daha belirli bir ileti içerebilir.

Görüntülenen katranlı iletiyi gösteren ekran görüntüsü.Ş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: