2012-01-03 19 views
20

MVC 3.0 e-ticaret sitesi yapıyorum. Kodumun her tarafındaki try-catch bloklarını engellemek istiyorum.MVC 3.0 uygulamasında atılan tüm hataları yakalamak için yolu temizleyin?

Soru oldukça basit - Web sitemde atılan tüm hataları yakalamak için iyi bir strateji nedir? Bunların hepsini bilmek istiyorum ... bu yüzden site yayınlandıktan sonra bu sayıyı 0'a getirmek için çalışabilirim. Her hatayı bir kayıt defterine yazmayı ve e-posta ile göndermeyi planlıyorum.

Global.asax dosyasında yakalama hakkında bir şeyler okumayı başardım ... ama ayrıca TÜMÜNÜ anlamadığını da okudum.

Herhangi bir öneriniz var mı, yoksa iyi bir yönde bana işaret edebilir mi?

+1

Tüm cevapları seviyorum ... ELMAH ile ilgili olanı denedim ve bunu seviyorum. Bu kadar kolay yüklü ve tamamen benim crappy logger ile değiştireceğim. ELMAH'ın gitmek için bir yol olduğuna emin olmak için bazı oylar/yorumlar görmek istiyorum ... –

+0

Katılıyorum! ELMAH harika ve kurulumu çok kolay. Proje sayısını başarılı bir şekilde ELMAH kullandım. – azamsharp

cevap

21

sorunu çözme MVC yolu filtreler bulunmaktadır. Eğer zaten MVC3 kullanıyorsanız, global filtreler tam size göre. Hataları teslim etmek için özel filtre tipi vardır: HandleError filtresi. This article, onu kullanmanın çoğunu açıklar. ELMAH ELMAH.MVC olduğu yani saklanmasını tüm işlenmemiş özel durumlar yapmak istiyorsanız, Nihayet

public class HandleExceptionsAttribute : HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext filterContext) 
    { 
     var expception = filterContext.Exception; 

     // custom code here.. 
    } 
} 

ve kaydedilir:

Sen filtreyi kendi uygulama ve işlenmeyen istisnaların her yönünü, örneğin kontrol olabilir en iyi seçim. , NuGet package kullanarak kurun yapılandırmak ve tüm veri gibi bir bağlantıdan erişilebilir olacaktır:

http://yourapp/admin/elmah/

Benim önerim Global.asax Application_Error böyle bir şey kullanmayınetmektir. cs.

+0

Bu rotaya gittim. Her şey nuget'i kullanarak benim için harika bir şeydi. Sadece tuzak - insanların elmah.axd dosyasını güvenli hale getirdiğinden emin olmanız gerekir. Elmah kontrol ünitesine yetki verdiğinizde bile, hala elmah.axd'ye ulaşabilirsiniz. Bunu engellerseniz, /a/b/c/d/elmah.axd gibi bir şey yapamayacağınızdan emin olun ... bu yüzden biraz çalışma gerektirir. –

+0

Elmah.axd ile uğraşmayın, lütfen web.config sayfanızdan kaldırın! Ne yazık ki bunu otomatik olarak yapamam. Elmah.MVC kurulduktan sonra, kayıtlı http: // app/admin/elmah rotanız olacaktır. [Authorize] özelliği ile güvenceye almak için sorun yok; –

+0

bazı ayrıntılar burada: http://www.beletsky.net/2011/03/integrating-elmah-to-aspnet-mvc-in.html –

2

Global.asax'ta atılan Özel Durum'ları işleyebilirsiniz.

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception exception = Server.GetLastError(); 
    // global handling code goes here 

    Server.ClearError(); 
} 
+0

Bu, yarış koşullarına duyarlı görünüyor. –

+3

Ayrıca çalışmaz – War

İlgili konular