SORU
28 HAZİRAN 2011, Salı


Application_Error ateş = " customerrors;" değil;

global.asax dosyasında Application_Error bir hata oluştuğunda yürüten olay kodu var ve kendime hatanın ayrıntılarını e-postalar.

void Application_Error(object sender, EventArgs e)
{
    var error = Server.GetLastError();

    if (error.Message != "Not Found")
    {
        // Send email here...
    }

}

Bu ancak ben Application_Error olayı başlatılmıyor canlı bizim sunucuya yayımlamak için Visual Studio, onu kullanıyorum, gayet iyi çalışıyor.

Birkaç denemeden sonra customErrors="On" ayarını tekrar ateşleme olayı yeniden başlar ancak customErrors="Off", hiç Application_Error ateşleme alabilirim.

Herkes Application_Error customErrors web.config etkin zaman ateş olmaz neden önerebilirsiniz?

CEVAP
29 Temmuz 2011, Cuma


GÜNCELLEME
Bu cevap bir çözüm sağlamaz beri, düzenlemek istemiyorum, ama bu sorunu çözmek çok daha temiz bir yol buldum. Ayrıntılar için bakınız my other answer...

Orijinal Cevabı:
Application_Error() yöntemi çağrılan değil nedenini anladım...

Global.asax.cs

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute()); // this line is the culprit
    }
...
}

Varsayılan olarak yeni bir proje oluşturulduğunda (), MVC uygulama Global.asax.cs dosyasında bir mantık vardır. Bu mantık, eşleştirme yolları ve kayıt filtreler için kullanılır. Varsayılan olarak, bu yalnızca bir filtre kaydeder:* *18 bir filtre. CustomErrors (veya RemoteOnly ayarladığınızda uzak istekleri arasında, HandleErrorAttribute MVC bir Hata görüntülemek için söylüyor ve bunu asla Application_Error() yöntemini çağırır. Bu belgeleri bulamadım ama this answer on programmers.stackexchange.com açıklanmıştır.

ApplicationError almak için() yöntem çağrısında bulunduherözel durum, basit HandleErrorAttribute filtre kaydeden satırı kaldırın.

CustomErrors istediğini elde etmek için yapılandırmak için Nasıl . sorun şimdi:

CustomErrors bölüm 20 ** varsayılan. MVC bir rota da defaultRedirect özniteliği belirtebilirsiniz. Çok basit bir ErrorController yarattım ve benim web değiştirdi.yapılandırma bu gibi görünüyor

web.config

<customErrors mode="RemoteOnly" redirectMode="ResponseRedirect" defaultRedirect="~/Error">
  <error statusCode="404" redirect="~/Error/PageNotFound" />
</customErrors>

Bu çözüm sorun 302 hata URL yönlendirme yapmasıdır ve daha sonra bu sayfaları 200 durum kodu ile cevap verin. Bu kötü Google indeksleme için hata sayfalarını açar. Ayrıca HTTP spec için çok uyumlu değil. Yapmak istediğim şey Yönlendirme ve özel hata benim görüşlerim ile özgün yanıt overrite.

redirectMode="ResponseRewrite" değiştirmeye çalıştım. Ne yazık ki, this option does not support MVC routes sadece HTML sayfaları statik veya SEO. İlk başta statik bir HTML sayfası kullanmaya çalıştım ama yanıt kodu 200 durgundu ama en azından yönlendirme yoktu. Ben o zaman 33*... *bir fikrim var

Hata işleme için MVC vazgeçmeye karar verdim. Error.aspx PageNotFound.aspx bir ben yarattım. Bu sayfalarda çok basit, ama sihirli bir parça vardı

<script type="text/C#" runat="server">
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Response.StatusCode = (int) System.Net.HttpStatusCode.InternalServerError;
    }
</script>

Bu blok sayfayı doğru durum kodu ile servis edilmesini söylüyor. Bu PageNotFound kaba.sayfa SEO HttpStatusCode.NotFound yerine kullandım. Benim web değiştirdim.yapılandırma bu gibi görünüyor

<customErrors mode="RemoteOnly" redirectMode="ResponseRewrite" defaultRedirect="~/Error.aspx">
  <error statusCode="404" redirect="~/PageNotFound.aspx" />
</customErrors>

Hepsi mükemmel çalıştı!

Özet:

  • Satırı kaldırın: filters.Add(new HandleErrorAttribute());
  • Application_Error() yöntem özel durumlar oturum açmak için kullanın
  • Bir ResponseRewrite ile customErrors, SEO sayfaları işaret kullanın
  • SEO sayfaları kendi cevap durum kodlarını sorumlu olun

Bu çözüm ile fark ettim birkaç olumsuzlukları vardır.

  • SEO sayfaları Jilet şablonları ile herhangi bir işaretleme paylaşamaz, tutarlı bir görünüm için sitemizin standart üstbilgi ve altbilgi yeniden biçimlendirme ve hissetmek zorunda kaldım.
  • *.SEO sayfaları doğrudan URL basarak erişilebilir

Bu sorunlar için alternatif çözüm var ama onları herhangi bir ekstra iş yapmak için yeterince endişe etmiyordum.

Bu herkes yardımcı olur umarım!

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • apenney888

    apenney888

    27 EKİM 2010
  • maxman.tv

    maxman.tv

    29 EKİM 2013
  • The Verge

    The Verge

    8 AĞUSTOS 2006