Özel Hata Sayfası Görüntüleme (VB)

Scott Mitchell tarafından

Kodu indirin veya PDF 'yi indirin

ASP.NET Web uygulamasında bir çalışma zamanı hatası oluştuğunda kullanıcı ne görür? Yanıt, Web sitesinin> yapılandırma <customErrors öğesine bağlıdır. Varsayılan olarak, kullanıcılara bir çalışma zamanı hatası oluştuğunu gösteren unsightly sarı bir ekran görüntülenir. Bu öğreticide, sitenizin görünümü ile eşleşen bir aesthepepkiralama özel hata sayfasını göstermek üzere bu ayarların nasıl özelleştirileceği gösterilmektedir.

Giriş

Mükemmel bir dünyada, çalışma zamanı hataları olmayacaktır. Programcılar bir hata vererek ve güçlü Kullanıcı girişi doğrulaması ile kod yazar ve veritabanı sunucuları ile e-posta sunucuları gibi dış kaynaklar hiçbir şekilde çevrimdışı olmaz. Kuşkusuz, gerçeklik hataları ' nda kaçınılmaz. .NET Framework sınıflar bir özel durum oluşturarak hatayı işaret ediyor. Örneğin, bir SqlConnection nesnesinin Open metodunu ç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 Try/Catch/Finally blokları kullanılarak işlenebilir. Try bir blok içindeki kod bir özel durum oluşturursa, denetim, geliştiricinin hatadan kurtulmak için deneyebileceği uygun catch bloğuna aktarılır. Eşleşen bir catch bloğu yoksa veya özel durumu oluşturan kod bir try bloğunda değilse, özel durum Try/Catch/Finally blokları aramasında çağrı yığınını uygular.

Özel durum, ASP.NET çalışma zamanına, işlem yapılmadan tamamen kabarcıiyorsa, HttpApplication sınıfın Error olayı tetiklenir ve yapılandırılan hata sayfası görüntülenir. Varsayılan olarak, ASP.NET, (ysod) sarı ekranı olarak adlandırılan affectionately bir hata sayfası görüntüler. Şu iki sürümü vardır: One özel durum ayrıntılarını, yığın izlemesini ve geliştiricilerin uygulamada hata ayıklamasına yardımcı olan diğer bilgileri gösterir (bkz. Şekil 1); diğeri de bir çalışma zamanı hatası olduğunu belirtir (bkz. Şekil 2).

Özel durum ayrıntıları, uygulamada hata ayıklamada geliştiriciler için oldukça yararlıdır, ancak son kullanıcıların da bir unsod 'yi göstermek çok daha fazla ve unuzman hale geldı. Bunun yerine, son kullanıcılar, durumu açıklayan daha kolay bir şekilde sitenin görünümünü tutan bir hata sayfasına alınmalıdır. İyi haber, böyle bir özel hata sayfasının oluşturulması oldukça kolaydır. Bu öğretici, ASP. NET ' in farklı hata sayfaları. Daha sonra, bir hata durumunda kullanıcılara özel hata sayfası göstermek için Web uygulamasının nasıl yapılandırılacağını gösterir.

Üç tür hata sayfasını İnceleme

Bir ASP.NET uygulamasında işlenmeyen bir özel durum ortaya çıkarsa, üç hata sayfası türünden biri görüntülenir:

  • Özel durum ayrıntıları sarı ölüm hata sayfası
  • Çalışma zamanı hatası sarı ölüm hata sayfası veya
  • Özel hata sayfası

Hata sayfası geliştiricileri, en çok tanıdık özel durum ayrıntılardır. Bu sayfa, varsayılan olarak, yerel olarak ziyaret edilen kullanıcılara görüntülenir ve bu nedenle, siteyi geliştirme ortamında sınarken bir hata oluştuğunda gördüğünüz sayfasıdır. Adından da anlaşılacağı gibi, özel durum ayrıntıları, tür, ileti ve yığın izleme hakkında ayrıntılı bilgi sağlar. Daha fazlası, özel durum ASP.NET sayfanızın arka plan kod sınıfında kodu tarafından oluşturulmuşsa ve uygulama hata ayıklama için yapılandırıldıysa, özel durum ayrıntıları da bu kod satırını (ve üzerinde ve altında birkaç satır kod satırı) gösterir.

Şekil 1 ' de özel durum ayrıntıları gösterilmektedir. Tarayıcının adres penceresindeki URL 'YI Note: http://localhost:62275/Genre.aspx?ID=foo. Genre.aspx sayfanın belirli bir tarz kitap incelemelerini listelediği hatırlayın. GenreId değerin (bir uniqueidentifier) QueryString aracılığıyla geçirilmesini gerektirir; Örneğin, kurgu incelemelerini görüntülemek için uygun URL Genre.aspx?ID=7683ab5d-4589-4f03-a139-1c26044d0146. uniqueidentifier olmayan bir değer QueryString aracılığıyla ("foo" gibi) geçirilirse bir özel durum oluşturulur.

Note

Bu hatayı indirmek üzere kullanılabilen demo Web uygulamasında yeniden oluşturmak için, Genre.aspx?ID=foo doğrudan ziyaret edebilir veya Default.aspx"bir çalışma zamanı oluşturma hatası" bağlantısına tıklayabilirsiniz.

Şekil 1' de sunulan özel durum bilgilerini aklınızda edin. "Bir karakter dizesinden uniqueidentifier değerine dönüştürülürken dönüştürme başarısız oldu" özel durum iletisi sayfanın en üstünde bulunur. System.Data.SqlClient.SqlExceptionözel durumun türü de listelenmiştir. Yığın izlemesi de vardır.

Şekil 1: özel durum ayrıntıları YSOD özel durum hakkında bilgi 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ı yıldır ve Şekil 2' de gösterilir. Çalışma zamanı hatası, ziyaretçiye bir çalışma zamanı hatası oluştuğunu bildirir, ancak oluşturulan özel durumla ilgili herhangi bir bilgi içermez. (Ancak, bu, bu tür bir YSOD 'nin bir parçası olan Web.config dosyasını değiştirerek hata ayrıntılarını nasıl görüntüleyebileceğinize ilişkin yönergeler sağlar.)

Varsayılan olarak, çalışma zamanı hatası YSOD, tarayıcının adres çubuğunda Şekil 2' deki URL tarafından (http://www.yoursite.com)aracılığıyla) uzaktan ziyaret eden kullanıcılara gösterilir: http://httpruntime.web703.discountasp.net/Genre.aspx?ID=foo. Geliştiriciler hata ayrıntılarını öğrenmekte olduğu için iki farklı YSOD ekranı mevcuttur, ancak bu tür bilgiler canlı bir sitede gösterilmemelidir çünkü bu durum, olası güvenlik açıklarını veya diğer hassas bilgileri bölgesi.

Note

' İ de ve Web ana bilgisayarınız olarak DiscountASP.NET kullanıyorsanız, çalışma zamanı hatası ile canlı siteyi ziyaret ederken görüntülemediğine dikkat edebilirsiniz. Bunun nedeni, DiscountASP.NET 'in sunucularının varsayılan olarak özel durum ayrıntılarını gösterecek şekilde yapılandırılmalarından kaynaklanır. İyi haber, Web.config dosyanıza bir <customErrors> bölümü ekleyerek bu varsayılan davranışı geçersiz kıkılabileceğiniz yerdir. "Hangi hata sayfasının görüntülendiğini yapılandırma" bölümünde <customErrors> bölümü ayrıntılı olarak incelenir.

Şekil 2: çalışma zamanı hatası YSOD herhangi bir hata ayrıntısı içermiyor
(Tam boyutlu görüntüyü görüntülemek Için tıklayın)

Üçüncü hata türü sayfası, oluşturduğunuz bir Web sayfası olan özel hata sayfasıdır. Özel hata sayfasının avantajı, kullanıcının sayfanın görünümü ve hisde yanında görüntülenen bilgiler üzerinde tamamen denetim sahibi olmanız durumunda; özel hata sayfası, diğer sayfalarınız ile aynı ana sayfayı ve stilleri kullanabilir. "Özel hata sayfası kullanma" bölümünde özel bir hata sayfası oluşturma ve işlenmemiş bir özel durum durumunda görüntülenecek şekilde yapılandırma gösterilmektedir. Şekil 3 ' te bu özel hata sayfasının gizli bir üst sürümü sunulmaktadır. Gördüğünüz gibi, hata sayfasının görünümü, Şekil 1 ve 2 ' de gösterilen sarı ekranlarından birinden çok daha profesyonel bir şekilde görünür.

Şekil 3: özel bir hata sayfası daha uyarlanmış bir görünüm sağlar
(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 bir dakikanızı ayırın. Adres çubuğunun özel hata sayfasının URL 'sini (/ErrorPages/Oops.aspx) gösterdiğini unutmayın. Şekil 1 ve 2 ' de, ölüm 'nin sarı ekranları hatanın kaynaklandığı sayfada gösterilir (Genre.aspx). Özel hata sayfası, hatanın aspxerrorpath QueryString parametresi aracılığıyla gerçekleştiği sayfanın URL 'sini geçti.

Hangi hata sayfasının görüntülendiğini yapılandırma

Olası üç hata sayfası görüntülendiğinde iki değişken temel alınarak belirlenir:

  • <customErrors> bölümündeki yapılandırma bilgileri ve
  • Kullanıcının siteyi yerel olarak veya uzaktan ziyaret edip etmediğini belirtir.

Web.config <customErrors> bölümü , hangi hata sayfasının gösterildiğini etkileyen iki özniteliğe sahiptir: defaultRedirect ve mode. defaultRedirect özniteliği isteğe bağlıdır. Sağlanmışsa, özel hata sayfasının URL 'sini belirtir ve çalışma zamanı hatası olarak özel hata sayfasının gösterilip gösterilmeyeceğini belirtir. mode özniteliği gereklidir ve üç değerden birini kabul eder: On, Offveya RemoteOnly. Bu değerler aşağıdaki davranışa sahiptir:

  • On-özel hata sayfası veya çalışma zamanı hatası, yerel veya uzak olmalarından bağımsız olarak tüm ziyaretçilere gösterildiğini gösterir.
  • Off-özel durum ayrıntılarının, yerel veya uzak olup olmadığına bakmaksızın tüm ziyaretçilere görüntülendiğini belirtir.
  • RemoteOnly-özel hata sayfası veya çalışma zamanı hatası, uzak ziyaretçilere gösterilir, ancak özel durum ayrıntıları YSOD yerel ziyaretçilere gösterilir.

Aksi belirtilmedikçe ASP.NET, mode özniteliğini RemoteOnly olarak ayarlamış ve bir defaultRedirect değeri belirtmediğiniz gibi davranır. Diğer bir deyişle, varsayılan davranış, özel durum ayrıntılarının, uzak ziyaretçilere çalışma zamanı hatası gösterilirken yerel ziyaretçilere görüntülenmelerdir. Web uygulamanızın Web.config file. bir <customErrors> bölümü ekleyerek bu varsayılan davranışı geçersiz kılabilirsiniz

Özel hata sayfası kullanma

Her Web uygulamasının özel bir hata sayfası olmalıdır. Çalışma zamanı hatasına daha profesyonel bir alternatif sağlar, daha kolay bir şekilde oluşturulabilir ve uygulamanın özel hata sayfasını kullanmak üzere yapılandırılması, yalnızca birkaç dakika sürer. İlk adım özel hata sayfasını oluşturuyor. ErrorPages adlı kitap Incelemeleri uygulamasına yeni bir klasör ekledim ve Oops.aspxadlı yeni bir ASP.NET sayfasına eklendim. Sayfanın, sitenizdeki geri kalan sayfalarla aynı ana sayfayı kullanmasını sağlamak için, aynı görünümü otomatik olarak devramını sağlayabilirsiniz.

Şekil 4: özel hata sayfası oluşturma

Sonra, hata sayfası için içerik oluşturma birkaç dakika harcaın. Beklenmeyen bir hata olduğunu ve sitenin giriş sayfasına geri bir bağlantı olduğunu belirten bir ileti içeren basit bir özel hata sayfası oluşturduğdum.

Ş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ığında, Web uygulamasını özel hata sayfasını kullanmak için çalışma zamanı hatası ' nın yerine kullanın. Bu, <customErrors> bölümünün defaultRedirect özniteliğinde hata sayfasının URL 'SI belirtilerek gerçekleştirilir. Aşağıdaki biçimlendirmeyi uygulamanızın Web.config dosyasına ekleyin:

<configuration>
    ...

    <system.web>
        <customErrors mode="RemoteOnly"
                      defaultRedirect="~/ErrorPages/Oops.aspx" />

        ...
    </system.web>
</configuration>

Yukarıdaki biçimlendirme, uygulamayı yerel olarak ziyaret eden kullanıcılar için özel hata sayfasını kullanırken, uzaktan ziyaret eden kullanıcılar için özel hata sayfası olan özel durum ayrıntılarını göstermek üzere uygulamayı yapılandırır. Bunu işlem içinde görmek için Web sitenizi üretim ortamına dağıtın ve ardından canlı sitedeki tarz. aspx sayfasını geçersiz bir QueryString değeri ile ziyaret edin. Özel hata sayfasını görmeniz gerekir (bkz. Ş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 bir QueryString içeren Genre.aspx sayfasını ziyaret edin. Hala özel durum ayrıntılarını görmeniz gerekir (bkz. Şekil 1' e geri başvurabilirsiniz). RemoteOnly ayarı, üretim ortamındaki siteyi ziyaret eden kullanıcıların özel hata sayfasını görmesini sağlarken geliştiriciler yerel olarak çalışır ve özel durum ayrıntılarını görmeye devam eder.

Geliştiricilere ve günlüğe kaydetme hata ayrıntılarına bildirme

Geliştirme ortamında oluşan hatalar, geliştiricinin bilgisayarında oturmuş olması nedeniyle oluşur. Özel durum ayrıntılarında özel durumun bilgileri gösterilir ve hata oluştuğunda hangi adımların gerçekleştiğini bilir. Ancak üretimde bir hata oluştuğunda, siteyi ziyaret eden Son Kullanıcı hatayı raporlamak için zaman alacağından, geliştirici bir hata meydana geldi bilgisine sahip değildir. Ayrıca, Kullanıcı geliştirme ekibine bir hata oluştuğunu uyarma, özel durum türü, ileti ve yığın izlemesini bilmeden hatanın nedenini tanılamak zor olabilir ve tek başına düzelme olanağı sağlar.

Bu nedenlerden dolayı, üretim ortamındaki herhangi bir hata, kalıcı bir depoya (örneğin, bir veritabanı) kaydedilir ve geliştiricilerin bu hata ile ilgili uyarı almış olması halinde işlenir. Özel hata sayfası, bu günlüğe kaydetme ve bildirim yapmak için iyi bir yer olabilir. Ne yazık ki özel hata sayfasının hata ayrıntılarına erişimi yok ve bu nedenle bu bilgileri günlüğe kaydetmek için kullanılamaz. İyi haber, hata ayrıntılarını kesmeye ve bunları günlüğe girmeye yönelik çeşitli yollar ve sonraki üç öğreticinin bu konuyu daha ayrıntılı bir şekilde araştırmasına olanak sağlar.

Farklı HTTP hata durumları için farklı özel hata sayfaları kullanma

Bir ASP.NET sayfası tarafından bir özel durum oluşturulduğunda ve işlenmezse, özel durum, yapılandırılan hata sayfasını görüntüleyen ASP.NET çalışma zamanına kadar çalışır. Bir istek ASP.NET altyapısına gelirse ancak bazı nedenlerle işlenemezse, istenen dosya bulunamamıştır veya dosya için okuma izinleri devre dışı bırakılmışsa, ASP.NET altyapısı bir HttpExceptionoluşturur. Bu özel durum, ASP.NET sayfalarından çıkarılan özel durumlar, çalışma zamanına kadar kabarcıklar ve uygun hata sayfasının görüntülenmesine neden olur.

Bu, üretimde Web uygulaması için ne anlama geldiğini, kullanıcının bulunamayan bir sayfayı istemesi durumunda özel hata sayfasını görebileceklerini belirtir. Şekil 6 ' da böyle bir örnek gösterilmektedir. İstek var olmayan bir sayfa (NoSuchPage.aspx) için olduğundan, bir HttpException oluşturulur ve özel hata sayfası görüntülenir (aspxerrorpath QueryString parametresindeki NoSuchPage.aspx başvurusunu aklınızda bulunan).

şekil 6: ASP.NET çalışma zamanı, geçersiz bir Isteğ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, <customErrors> bölümünde <error> alt öğeleri kullanarak belirli bir HTTP durum kodu için farklı bir özel hata sayfası belirtebilirsiniz. Örneğin, 404 HTTP durum koduna sahip olan sayfa bulunamadı hatası durumunda farklı bir hata sayfası görüntülenmesi için, <customErrors> bölümünü aşağıdaki biçimlendirmeyi içerecek şekilde güncelleştirin:

<customErrors mode="RemoteOnly" defaultRedirect="~/ErrorPages/Oops.aspx">
    <error statusCode="404" redirect="~/ErrorPages/404.aspx" />
</customErrors>

Bu değişiklik varken, her ziyaret eden bir Kullanıcı, var olmayan bir ASP.NET kaynağını istediğinde, Oops.aspxyerine 404.aspx özel hata sayfasına yönlendirilir. Şekil 7 ' de gösterildiği gibi, 404.aspx sayfasında genel özel hata sayfasından daha belirli bir ileti bulunabilir.

Note

404 hata sayfasına göz atın ve etkili 404 hata sayfaları oluşturma konusunda yönergeler için bir kez daha .

Şekil 7: özel 404 hata sayfasında, Oops.aspx daha hedefli bir ileti görüntülenir
(Tam boyutlu görüntüyü görüntülemek Için tıklayın)

404.aspx sayfasına yalnızca Kullanıcı, bulunamayan bir sayfa için istek yaptığında ulaşıldığı için, bu özel hata sayfasını, kullanıcının bu özel hata türünü ele almanıza yardımcı olacak işlevselliği içerecek şekilde geliştirebilirsiniz. Örneğin, bilinen hatalı URL 'Leri iyi URL 'Ler ile eşleyen bir veritabanı tablosu oluşturabilir ve ardından 404.aspx özel hata sayfasının bu tabloda bir sorgu çalıştırmasını ve kullanıcının ulaşmaya çalıştığı sayfaları önermesini sağlayabilirsiniz.

Note

Özel hata sayfası yalnızca, ASP.NET altyapısı tarafından işlenen bir kaynağa bir istek yapıldığında görüntülenir. IIS ile ASP.NET geliştirme sunucusu öğreticisi arasındaki temel farklılıklar konusunda anlatıldığı 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ı var olmayan bir görüntü dosyası isterse ASP yerine IIS 'nin varsayılan 404 hata iletisini geri alır. AĞ tarafından yapılandırılan hata sayfası.

Özet

Bir ASP.NET uygulamasında işlenmeyen bir özel durum oluştuğunda, Kullanıcı üç hata sayfasında gösterilir: özel durum ayrıntıları sarı ekran ölüm ekranı; Çalışma zamanı hatası sarı ekran ölüm ekranı; veya özel bir hata sayfası. Hangi hata sayfası görüntülendiği, uygulamanın <customErrors> yapılandırmasına ve kullanıcının yerel olarak veya uzaktan ziyaret edilip edilmeyeceğini bağlıdır. Varsayılan davranış, yerel ziyaretçilere özel durum ayrıntıları ve uzak ziyaretçilere çalışma zamanı hatası gösterir.

Çalışma zamanı hatası YSOD, siteyi ziyaret eden kullanıcının potansiyel olarak gizli hata bilgilerini gizlediğini de, sitenizin görünüm ve kullanım alanını keser ve uygulamanızın hata halinde görünmesini sağlar. Özel hata sayfasının oluşturulmasını ve tasarlamayı ve <customErrors> bölümünün defaultRedirect özniteliğinde URL 'sini belirtmesini gerektiren özel bir hata sayfası kullanmak daha iyi bir yaklaşımdır. Farklı HTTP hata durumları için birden çok özel hata sayfasına da sahip olabilirsiniz.

Özel hata sayfası, üretimde bir Web sitesi için kapsamlı bir hata işleme stratejisindeki ilk adımdır. Hatanın geliştiricisini uyarma ve ayrıntılarını günlüğe kaydetme de önemli adımlardır. Sonraki üç öğretici hata bildirimi ve günlüğe kaydetme tekniklerini keşfedebilir.

Programlamanın kutlu olsun!

Daha Fazla Bilgi

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: