Özel Hata Sayfası Görüntüleme (VB)Displaying a Custom Error Page (VB)

Scott Mitchell tarafındanby Scott Mitchell

Kodu indirin veya PDF 'yi indirinDownload Code or Download PDF

ASP.NET Web uygulamasında bir çalışma zamanı hatası oluştuğunda kullanıcı ne görür?What does the user see when a runtime error occurs in an ASP.NET web application? Yanıt, Web sitesinin> yapılandırma <customErrors öğesine bağlıdır.The answer depends on how the website's <customErrors> configuration. Varsayılan olarak, kullanıcılara bir çalışma zamanı hatası oluştuğunu gösteren unsightly sarı bir ekran görüntülenir.By default, users are shown an unsightly yellow screen proclaiming that a runtime error has occurred. 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.This tutorial shows how to customize these settings to display an aesthetically-pleasing custom error page that matches your site's look and feel.

GirişIntroduction

Mükemmel bir dünyada, çalışma zamanı hataları olmayacaktır.In a perfect world there would be no run-time errors. 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.Programmers would write code with nary a bug and with robust user input validation, and external resources like database servers and email servers would never go offline. Kuşkusuz, gerçeklik hataları ' nda kaçınılmaz.Of course, in reality errors are inevitable. .NET Framework sınıflar bir özel durum oluşturarak hatayı işaret ediyor.The classes in the .NET Framework signal an error by throwing an exception. Örneğin, bir SqlConnection nesnesinin Open metodunu çağırmak, bir bağlantı dizesi tarafından belirtilen veritabanına bir bağlantı oluşturur.For example, calling a SqlConnection object's Open method establishes a connection to the database specified by a connection string. Ancak, veritabanı kapalıysa veya bağlantı dizesindeki kimlik bilgileri geçersizse, Open yöntemi bir SqlExceptionoluşturur.However, if the database is down or if the credentials in the connection string are invalid then the Open method throws a SqlException. Özel durumlar Try/Catch/Finally blokları kullanılarak işlenebilir.Exceptions can be handled by the use of Try/Catch/Finally blocks. 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.If code within a Try block throws an exception, control is transferred to the appropriate catch block where the developer can attempt to recover from the error. 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.If there is no matching catch block, or if the code that threw the exception is not in a try block, the exception percolates up the call stack in search of Try/Catch/Finally blocks.

Ö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.If the exception bubbles all the way up to the ASP.NET runtime without being handled, the HttpApplication class's Error event is raised and the configured error page is displayed. Varsayılan olarak, ASP.NET, (ysod) sarı ekranı olarak adlandırılan affectionately bir hata sayfası görüntüler.By default, ASP.NET displays an error page that is affectionately referred to as the Yellow Screen of Death (YSOD). Ş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).There are two versions of the YSOD: one shows the exception details, a stack trace, and other information helpful to developers debugging the application (see Figure 1); the other simply states that there was a run-time error (see Figure 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ı.The exception details YSOD is quite helpful for developers debugging the application, but showing a YSOD to end users is tacky and unprofessional. 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.Instead, end users should be taken to an error page that maintains the site's look and feel with more user-friendly prose describing the situation. İyi haber, böyle bir özel hata sayfasının oluşturulması oldukça kolaydır.The good news is that creating such a custom error page is quite easy. Bu öğretici, ASP. NET ' in farklı hata sayfaları.This tutorial starts with a look at ASP.NET's different error pages. 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.It then shows how to configure the web application to show users a custom error page in the face of an error.

Üç tür hata sayfasını İncelemeExamining the Three Types of Error Pages

Bir ASP.NET uygulamasında işlenmeyen bir özel durum ortaya çıkarsa, üç hata sayfası türünden biri görüntülenir:When an unhandled exception arises in an ASP.NET application one of three types of error pages is displayed:

  • Özel durum ayrıntıları sarı ölüm hata sayfasıThe Exception Details Yellow Screen of Death error page,
  • Çalışma zamanı hatası sarı ölüm hata sayfası veyaThe Runtime Error Yellow Screen of Death error page, or
  • Özel hata sayfasıA custom error page

Hata sayfası geliştiricileri, en çok tanıdık özel durum ayrıntılardır.The error page developers are most familiar with is the Exception Details YSOD. 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.By default, this page is displayed to users who are visiting locally and therefore is the page that you see when an error occurs when testing the site in the development environment. 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.As its name implies, the Exception Details YSOD provides details about the exception - the type, the message, and the stack trace. 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.What's more, if the exception was raised by code in your ASP.NET page's code-behind class and if the application is configured for debugging then the Exception Details YSOD will also show this line of code (and a few lines of code above and below it).

Şekil 1 ' de özel durum ayrıntıları gösterilmektedir.Figure 1 shows the Exception Details YSOD page. Tarayıcının adres penceresindeki URL 'YI Note: http://localhost:62275/Genre.aspx?ID=foo.Note the URL in the browser's address window: http://localhost:62275/Genre.aspx?ID=foo. Genre.aspx sayfanın belirli bir tarz kitap incelemelerini listelediği hatırlayın.Recall that the Genre.aspx page lists the book reviews in a particular genre. 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.It requires that GenreId value (a uniqueidentifier) be passed through the querystring; for example, the appropriate URL to view the fiction reviews is 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.If a non-uniqueidentifier value is passed in through the querystring (such as "foo") an exception is thrown.

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.To reproduce this error in the demo web application available for download you can either visit Genre.aspx?ID=foo directly or click the "Generate a Runtime Error" link in Default.aspx.

Şekil 1' de sunulan özel durum bilgilerini aklınızda edin.Note the exception information presented in Figure 1. "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.The exception message, "Conversion failed when converting from a character string to uniqueidentifier" is present at the top of the page. System.Data.SqlClient.SqlExceptionözel durumun türü de listelenmiştir.The type of the exception, System.Data.SqlClient.SqlException, is listed, as well. Yığın izlemesi de vardır.There's also the stack trace.

Şekil 1: özel durum ayrıntıları YSOD özel durum hakkında bilgi içerirFigure 1: The Exception Details YSOD Includes Information About the Exception
(Tam boyutlu görüntüyü görüntülemek Için tıklayın)(Click to view full-size image)

Diğer YSOD türü, çalışma zamanı hatası yıldır ve Şekil 2' de gösterilir.The other type of YSOD is the Runtime Error YSOD, and is shown in Figure 2. Ç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.The Runtime Error YSOD informs the visitor that a run-time error has occurred, but it does not include any information about the exception that was thrown. (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.)(It does, however, provide instructions on how to make the error details viewable by modifying the Web.config file, which is part of what makes such a YSOD look unprofessional.)

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.By default, the Runtime Error YSOD is shown to users visiting remotely (through http://www.yoursite.com), as evidenced by the URL in the browser's Address bar in Figure 2: 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.The two different YSOD screens exist because developers are interested in knowing the error details, but such information should not be shown on a live site as it may reveal potential security vulnerabilities or other sensitive information to anyone who visits your site.

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.If you are following along and are using DiscountASP.NET as your web host, you may notice that the Runtime Error YSOD does not display when visiting the live site. 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.This is because DiscountASP.NET has their servers configured to show the Exception Details YSOD by default. İyi haber, Web.config dosyanıza bir <customErrors> bölümü ekleyerek bu varsayılan davranışı geçersiz kıkılabileceğiniz yerdir.The good news is that you can override this default behavior by adding a <customErrors> section to your Web.config file. "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.The "Configuring Which Error Page is Displayed" section examines the <customErrors> section in detail.

Şekil 2: çalışma zamanı hatası YSOD herhangi bir hata ayrıntısı içermiyorFigure 2: The Runtime Error YSOD Does Not Include Any Error Details
(Tam boyutlu görüntüyü görüntülemek Için tıklayın)(Click to view full-size image)

Üçüncü hata türü sayfası, oluşturduğunuz bir Web sayfası olan özel hata sayfasıdır.The third type of error page is the custom error page, which is a web page that you create. Ö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.The benefit of a custom error page is that you have complete control over the information that is displayed to the user along with the page's look and feel; the custom error page can use the same master page and styles as your other pages. "Ö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.The "Using a Custom Error Page" section walks through creating a custom error page and configuring it to display in the event of an unhandled exception. Şekil 3 ' te bu özel hata sayfasının gizli bir üst sürümü sunulmaktadır.Figure 3 offers a sneak peak of this custom error page. 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.As you can see, the look and feel of the error page is much more professional-looking than either of the Yellow Screens of Death shown in Figures 1 and 2.

Şekil 3: özel bir hata sayfası daha uyarlanmış bir görünüm sağlarFigure 3: A Custom Error Page Offers a More Tailored Look and Feel
(Tam boyutlu görüntüyü görüntülemek Için tıklayın)(Click to view full-size image)

Şekil 3' te tarayıcının adres çubuğunu incelemek için bir dakikanızı ayırın.Take a moment to inspect the browser's Address bar in Figure 3. Adres çubuğunun özel hata sayfasının URL 'sini (/ErrorPages/Oops.aspx) gösterdiğini unutmayın.Note that the Address bar shows the URL of the custom error page (/ErrorPages/Oops.aspx). Şekil 1 ve 2 ' de, ölüm 'nin sarı ekranları hatanın kaynaklandığı sayfada gösterilir (Genre.aspx).In Figures 1 and 2 the Yellow Screens of Death are shown in the same page that the error originated from (Genre.aspx). Özel hata sayfası, hatanın aspxerrorpath QueryString parametresi aracılığıyla gerçekleştiği sayfanın URL 'sini geçti.The custom error page is passed the URL of the page where the error occurred via the aspxerrorpath querystring parameter.

Hangi hata sayfasının görüntülendiğini yapılandırmaConfiguring Which Error Page is Displayed

Olası üç hata sayfası görüntülendiğinde iki değişken temel alınarak belirlenir:Which of the three possible error pages is displayed is based on two variables:

  • <customErrors> bölümündeki yapılandırma bilgileri veThe configuration information in the <customErrors> section, and
  • Kullanıcının siteyi yerel olarak veya uzaktan ziyaret edip etmediğini belirtir.Whether the user is visiting the site locally or remotely.

Web.config <customErrors> bölümü , hangi hata sayfasının gösterildiğini etkileyen iki özniteliğe sahiptir: defaultRedirect ve mode.The <customErrors> section in Web.config has two attributes that affect what error page is shown: defaultRedirect and mode. defaultRedirect özniteliği isteğe bağlıdır.The defaultRedirect attribute is optional. 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.If provided, it specifies the URL of the custom error page and indicates that the custom error page should be shown instead of the Runtime Error YSOD. mode özniteliği gereklidir ve üç değerden birini kabul eder: On, Offveya RemoteOnly.The mode attribute is required and accepts one of three values: On, Off, or RemoteOnly. Bu değerler aşağıdaki davranışa sahiptir:These values have the following behavior:

  • 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.On - indicates that the custom error page or the Runtime Error YSOD is shown to all visitors, regardless of whether they are local or remote.
  • 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.Off - specifies that the Exception Details YSOD is displayed to all visitors, regardless of whether they are local or remote.
  • 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.RemoteOnly - indicates that the custom error page or the Runtime Error YSOD is shown to remote visitors, while the Exception Details YSOD is shown to local visitors.

Aksi belirtilmedikçe ASP.NET, mode özniteliğini RemoteOnly olarak ayarlamış ve bir defaultRedirect değeri belirtmediğiniz gibi davranır.Unless you specify otherwise, ASP.NET acts as if you had set the mode attribute to RemoteOnly and had not specified a defaultRedirect value. 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.In other words, the default behavior is that the Exception Details YSOD is displayed to local visitors while the Runtime Error YSOD is shown to remote visitors. Web uygulamanızın Web.config file. bir <customErrors> bölümü ekleyerek bu varsayılan davranışı geçersiz kılabilirsinizYou can override this default behavior by adding a <customErrors> section to your web application's Web.config file.

Özel hata sayfası kullanmaUsing a Custom Error Page

Her Web uygulamasının özel bir hata sayfası olmalıdır.Every web application should have a custom error page. Ç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.It provides a more professional-looking alternative to the Runtime Error YSOD, it is easy to create, and configuring the application to use the custom error page takes only a few moments. İlk adım özel hata sayfasını oluşturuyor.The first step is creating the custom error page. ErrorPages adlı kitap Incelemeleri uygulamasına yeni bir klasör ekledim ve Oops.aspxadlı yeni bir ASP.NET sayfasına eklendim.I've added a new folder to the Book Reviews application named ErrorPages and added to that a new ASP.NET page named Oops.aspx. 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.Have the page use the same master page as the rest of the pages on your site so that it automatically inherits the same look and feel.

Şekil 4: özel hata sayfası oluşturmaFigure 4: Create a Custom Error Page

Sonra, hata sayfası için içerik oluşturma birkaç dakika harcaın.Next, spend a few minutes creating the content for the error page. 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.I've created a rather simple custom error page with a message indicating that there was an unexpected error and a link back to the site's homepage.

Şekil 5: özel hata sayfanızı tasarlamaFigure 5: Design Your Custom Error Page
(Tam boyutlu görüntüyü görüntülemek Için tıklayın)(Click to view full-size image)

Hata sayfası tamamlandığında, Web uygulamasını özel hata sayfasını kullanmak için çalışma zamanı hatası ' nın yerine kullanın.With the error page completed, configure the web application to use the custom error page in lieu of the Runtime Error YSOD. Bu, <customErrors> bölümünün defaultRedirect özniteliğinde hata sayfasının URL 'SI belirtilerek gerçekleştirilir.This is accomplished by specifying the URL of the error page in the <customErrors> section's defaultRedirect attribute. Aşağıdaki biçimlendirmeyi uygulamanızın Web.config dosyasına ekleyin:Add the following markup to your application's Web.config file:

<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.The above markup configures the application to show the Exception Details YSOD to users visiting locally, while using the custom error page Oops.aspx for those users visiting remotely. 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.To see this in action, deploy your website to the production environment and then visit the Genre.aspx page on the live site with an invalid querystring value. Özel hata sayfasını görmeniz gerekir (bkz. Şekil 3' e geri bakın).You should see the custom error page (refer back to Figure 3).

Ö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.To verify that the custom error page is only shown to remote users, visit the Genre.aspx page with an invalid querystring from the development environment. Hala özel durum ayrıntılarını görmeniz gerekir (bkz. Şekil 1' e geri başvurabilirsiniz).You should still see the Exception Details YSOD (refer back to Figure 1). 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.The RemoteOnly setting ensures that users visiting the site on the production environment see the custom error page while developers working locally continue to see the details of the exception.

Geliştiricilere ve günlüğe kaydetme hata ayrıntılarına bildirmeNotifying Developers and Logging Error Details

Geliştirme ortamında oluşan hatalar, geliştiricinin bilgisayarında oturmuş olması nedeniyle oluşur.Errors that occur in the development environment were caused by the developer sitting at her computer. Ö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.She is shown the exception's information in the Exception Details YSOD, and she knows what steps she was performing when the error occurred. 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.But when an error occurs on production, the developer has no knowledge that an error occurred unless the end user visiting the site takes the time to report the error. 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.And even if the user goes out of his way to alert the development team that an error occurred, without knowing the exception type, message, and stack trace it can be difficult to diagnose the cause of the error, let alone fix it.

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.For these reasons it is paramount that any error in the production environment is logged to some persistent store (such as a database) and that the developers are alerted of this error. Özel hata sayfası, bu günlüğe kaydetme ve bildirim yapmak için iyi bir yer olabilir.The custom error page may seem like a good place to do this logging and notification. 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.Unfortunately, the custom error page does not have access to the error details and therefore cannot be used to log this information. İ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.The good news is that there are a number of ways to intercept the error details and to log them, and the next three tutorials explore this topic in more detail.

Farklı HTTP hata durumları için farklı özel hata sayfaları kullanmaUsing Different Custom Error Pages for Different HTTP Error Statuses

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.When an exception is thrown by an ASP.NET page and is not handled, the exception percolates up to the ASP.NET runtime, which displays the configured error page. 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.If a request comes into the ASP.NET engine but cannot be processed for some reason - perhaps the requested file is not found or Read permissions have been disabled for the file - then the ASP.NET engine raises an HttpException. 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.This exception, like exceptions raised from ASP.NET pages, bubbles up to the runtime, causing the appropriate error page to be displayed.

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.What this means for the web application in production is that if a user requests a page that is not found then they will see the custom error page. Şekil 6 ' da böyle bir örnek gösterilmektedir.Figure 6 shows such an example. İ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).Because the request is for a non-existent page (NoSuchPage.aspx), an HttpException is thrown and the custom error page is displayed (note the reference to NoSuchPage.aspx in the aspxerrorpath querystring parameter).

ş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ülerFigure 6: The ASP.NET Runtime Displays the Configured Error Page In Response to an Invalid Request
(Tam boyutlu görüntüyü görüntülemek Için tıklayın)(Click to view full-size image)

Varsayılan olarak, tüm hata türleri aynı özel hata sayfasının görüntülenmesine neden olur.By default, all types of errors cause the same custom error page to be displayed. Ancak, <customErrors> bölümünde <error> alt öğeleri kullanarak belirli bir HTTP durum kodu için farklı bir özel hata sayfası belirtebilirsiniz.However, you can specify a different custom error page for a specific HTTP status code using <error> children elements within the <customErrors> section. Ö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:For example, to have a different error page displayed in the event of a page not found error, which has an HTTP status code of 404, update the <customErrors> section to include the following markup:

<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.With this change in place, whenever a user visiting remotely requests an ASP.NET resource that does not exist, they will be redirected to the 404.aspx custom error page instead of Oops.aspx. Şekil 7 ' de gösterildiği gibi, 404.aspx sayfasında genel özel hata sayfasından daha belirli bir ileti bulunabilir.As Figure 7 illustrates, the 404.aspx page can include a more specific message than the general custom error page.

Note

404 hata sayfasına göz atın ve etkili 404 hata sayfaları oluşturma konusunda yönergeler için bir kez daha .Check out 404 Error Pages, One More Time for guidance on creating effective 404 error pages.

Şekil 7: özel 404 hata sayfasında, Oops.aspx daha hedefli bir ileti görüntülenirFigure 7: The Custom 404 Error Page Displays a More Targeted Message Than Oops.aspx
(Tam boyutlu görüntüyü görüntülemek Için tıklayın)(Click to view full-size image)

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.Because you know that the 404.aspx page is only reached when the user makes a request for a page that was not found, you can enhance this custom error page to include functionality to help the user address this specific type of error. Ö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.For example, you could build a database table that maps known bad URLs to good URLs, and then have the 404.aspx custom error page run a query against that table and suggest pages the user may be trying to reach.

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.The custom error page is only displayed when a request is made to a resource handled by the ASP.NET engine. 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.As we discussed in the Core Differences Between IIS and the ASP.NET Development Server tutorial, the web server may handle certain requests itself. 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.By default, the IIS web server processes requests for static content like images and HTML files without invoking the ASP.NET engine. 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ı.Consequently, if the user requests a non-existent image file they will get back IIS's default 404 error message rather than ASP.NET's configured error page.

ÖzetSummary

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ı.When an unhandled exception occurs in an ASP.NET application, the user is shown one of three error pages: the Exception Details Yellow Screen of Death; the Runtime Error Yellow Screen of Death; or a custom error page. 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.Which error page is displayed depends on the application's <customErrors> configuration and whether the user is visiting locally or remotely. Varsayılan davranış, yerel ziyaretçilere özel durum ayrıntıları ve uzak ziyaretçilere çalışma zamanı hatası gösterir.The default behavior is to show the Exception Details YSOD to local visitors and the Runtime Error YSOD to remote visitors.

Ç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.While the Runtime Error YSOD hides potentially sensitive error information from the user visiting the site, it breaks from your site's look and feel and makes your application look buggy. Ö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.A better approach is to use a custom error page, which entails creating and designing the custom error page and specifying its URL in the <customErrors> section's defaultRedirect attribute. Farklı HTTP hata durumları için birden çok özel hata sayfasına da sahip olabilirsiniz.You can even have multiple custom error pages for different HTTP error statuses.

Özel hata sayfası, üretimde bir Web sitesi için kapsamlı bir hata işleme stratejisindeki ilk adımdır.The custom error page is the first step in a comprehensive error handling strategy for a website in production. Hatanın geliştiricisini uyarma ve ayrıntılarını günlüğe kaydetme de önemli adımlardır.Alerting the developer of the error and logging its details are also important steps. Sonraki üç öğretici hata bildirimi ve günlüğe kaydetme tekniklerini keşfedebilir.The next three tutorials explore techniques for error notification and logging.

Programlamanın kutlu olsun!Happy Programming!

Daha Fazla BilgiFurther Reading

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:For more information on the topics discussed in this tutorial, refer to the following resources: