2012-08-30 44 views
5

Ben aspx web formları için yeniyim.Yalnızca belirli bir HttpException yakalamak

Web Uygulamamda özel bir Özel Durum yakalamak istiyorum - Validation of viewstate MAC failed.

protected void Application_Error(object sender, EventArgs e) 
{ 
    HttpException lastErrWrapper = Server.GetLastError() as HttpException; 

    if ((uint)lastErrWrapper.ErrorCode == 0x80004005) 
    { 
     // do something 
    }   
} 

sorun tüm işlenmeyen HttpExceptions yakalar olmasıdır:
I (Global.asax.cs değil) bu çalıştı.

Bunu başarmanın en iyi yolu nedir?


düzenleme:

kontrol bu konunun daha ileri ben iç istisna ViewStateException, ancak belirli bir "errorCode" özelliği

sayesinde sahip görünmüyor bulundu ederken

+0

diğer işlenmeyen istisna dışında ne yapmak istiyorsun? – MNGwinn

+2

Bu dökümün bir istisnaya neden olabileceğine inanıyorum. '(Server.GetLastError() HttpException olan)' ı gibi test etmelisiniz {...} ' –

+0

@MNGwinn - Gerçekten farketmez," farklı bir şey "yapmak istiyorum. başarısız oldu – Bassal

cevap

5

Bunu yapmalısınız. ption, HTTP/web ile ilgili tüm öğelerin tek bir işleyici tarafından yerleştirilebilmesini sağlamak için tasarlanmıştır, bu yüzden de kazmanız ve özgün özel duruma bakmanız gerekir. ViewStateException, başka bir View State ile ilgili hataları bir çift yakalayabilir, ancak bu muhtemelen Tamam. İşte

+0

Teşekkürler, ben de bunu öğrendim (düzenlememe bakın). Hangi görüş durumu hatasının atıldığını görmenin bir yolu yok mu? – Bassal

+0

En iyi bahisten, muhtemelen bunların herhangi birini ayırt edip edemediğini görmek için hata ayıklama yaparken, viewtateexception özelliklerinin tümünü kontrol etmeniz yeterlidir. Aksi takdirde, yalnızca "viewtate mac dosyasının başarısız olması" için istisna mesajını kontrol edebilirsiniz. – ryanulit

+0

HttpException konumundaki ErrorCode özelliği, Exception öğesinden devralınmaz ve ViewStateException HttpException türetilmez, dolayısıyla onu görmeyi beklemezdim. Dokümanlar, bir HRESULT içerdiğini söylüyor, ancak bu normal olarak Exception.HResult içinde. Yararlı bir hata kodu için umut istiyorsanız, ViewStateException.HResult'u kontrol edebilir ve orada neler olduğunu görebilirsiniz. – MNGwinn

1

biz globa.asax içinde sayaç ViewState hataları yardımcı olmak için uygulamış şudur:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) 

    Dim context As HttpContext = HttpContext.Current 
    Dim exception As Exception = Server.GetLastError 

    'custom exception handling: 
    If Not IsNothing(exception) Then 

     If Not IsNothing(exception.InnerException) Then 

      'ViewState Exception: 
      If exception.InnerException.GetType = GetType(ViewStateException) Then 
       'The state information is invalid for this page and might be corrupted. 

       'Caused by VIEWSTATE|VIEWSTATEENCRYPTED|EVENTVALIDATION hidden fields being malformed 
       ' + could be page is submitted before being fully loaded 
       ' + hidden fields have been malformed by proxies or user tampering 
       ' + hidden fields have been trunkated by mobile devices 
       ' + remotly loaded content into the page using ajax causes the hidden fields to be overridden with incorrect values (when a user navigates back to a cached page) 

       'Remedy: reload the request page to replenish the viewstate: 
       Server.ClearError() 
       Response.Clear() 
       Response.Redirect(context.Request.Url.ToString, False) 
       Exit Sub 
      End If 

     End If 

    End If 

End Sub 
İlgili konular