2013-11-14 11 views
3

Это мой первый опыт работы с HttpModules. Мне нужно создать решение «перетаскивание» в существующие приложения ASP.NET, которое обеспечит общую обработку ошибок, перенаправив пользователей на новую страницу «ErrorFeedback.aspx». Таким образом, когда приложение сталкивается с исключением, пользователь будет перенаправлен на ErrorFeedback.aspx, где они смогут обеспечить обратную связь, связанную с ошибкой, если это необходимо. В настоящее время у нас около 300 веб-приложений, поэтому решение «перетаскивания», которое кажется наиболее перспективным, - HttpModule. Эта страница ErrorFeedback будет новой страницей, которая также будет добавлена ​​в решение. В конце концов, эти компоненты (DLL и пользовательская веб-страница) завершатся в пакете Nuget, но пока это нужно будет вручную скопировать/вставить в существующее решение.HttpModule - нужно перенаправить пользователя на определенную страницу, когда OnError достигает

Я слышал, что выполнение перенаправления внутри модуля - это плохая практика. Какова наилучшая практика для перенаправления пользователя на конкретную страницу всякий раз, когда встречается OnError в HttpModule?

ответ

1

Если вам нужно только перенаправить, вам лучше всего использовать web.config custom error pages. Но если вы хотите сделать еще некоторые вещи, как войти, например, чем вам нужно использовать HttpModule, что-то вроде этого:

public class ErrorManagementModule : IHttpModule 
{ 
    public void Dispose() { } 

    public void Init(HttpApplication context) 
    { 
     //handle context exceptions 
     context.Error += (sender, e) => HandleError(); 
     //handle page exceptions 
     context.PostMapRequestHandler += (sender, e) => 
      { 
       Page page = HttpContext.Current.Handler as Page; 
       if (page != null) 
        page.Error += (_sender, _e) => HandleError(); 
      }; 
    } 

    private void HandleError() 
    { 
     Exception ex = HttpContext.Current.Server.GetLastError(); 
     if (ex == null) return; 

     LogException(ex); 

     HttpException httpEx = ex as HttpException; 
     if (httpEx != null && httpEx.GetHttpCode() == 500) 
     { 
      HttpContext.Current.Response.Redirect("/PrettyErrorPage.aspx", true); 
     } 
    } 
} 
+0

Будут ли страницы пользовательских ошибок web.config улавливать ошибки, отличные от HTTP, такие как исключения приложений? Я не думал, что это будет, но я могу ошибаться? –

+0

Хорошо, что большинство необработанных исключений переведут на HTTP 500, и если у вас есть перенаправление на 500 в вашем web.config, оно будет перенаправлено. –

1

Вы можете использовать custom error pages in Web.config, а не HttpModule. Но если вам действительно нужно перенаправить, лучше использовать RewitePath method.

А вот некоторые ноты вообще:

  1. При использовании URL переписывания, вы должны быть осторожны о SEO. Потому что ваш исходный URL-адрес будет учитываться в результатах поиска.
  2. ASP.NET routing также является хорошим механизмом и альтернативой тому, что вы пытаетесь сделать
  3. Почему вы говорите, что перенаправление плохо в HttpModule? Любая конкретная причина?
+0

Я просто * слышал *, что это было плохо. Я не знал, действительно ли это было или нет. А также это приложение для интрасети, поэтому SEO не является проблемой. Спасибо за информацию, хотя! –