allofw: (Енотовидный собак)
[personal profile] allofw
Тут такое дело, оказывает, ещё не все перешли на MVC, и иногда приходится развивать и поддерживать обычные Web Application'ы. И в них зачастую возникает потребность в сохранении ошибок, возникших у пользователя, а тому показывается красивое сообщение об ошибке.


Для промышленного отлова ошибок делаем простые шаги:

  1. изменяем Web-config
    <customErrors redirectMode="ResponseRedirect" mode="On" 
     defaultRedirect="/Pages/Error/Default.aspx">
          <error statusCode="404" redirect="~/Pages/Error/Error404.aspx"/>
          <error statusCode="500" redirect="~/Pages/Error/Error500.aspx"/>
    </customErrors>



    тут всё просто - по определённым ошибкам редиректим на специальные страницы, по дефолту - на дефолтную.

  2. изменяем Global.asax
    protected void Application_Error(object sender, EventArgs e)
    {
        try
        {
            Exception ex = Context.Error; // получили ошибку
     
            //для доступа с других страниц к ошибке, сохраним её в контекст
            HttpContext.Current.Application.Add("LastError", ex);
     
            // Сохраняем ошибку в БД
            using (var query = new DataSetPortalTableAdapter())
            {
                //query.SaveError(...);
            }
        }
        catch{...}
    }


  3. если нужно вывести сообщение на странице-заглушке (для определённой ошибки или же, наоборот, для дефолтной), то в коде получаем его с помощью
    lblError.Text = ((Exception) HttpContext.Current.Application.Get("LastError")).Message;


Всё просто.

Profile

allofw: (Default)
allofw

March 2013

S M T W T F S
      12
3456 7 8 9
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2017 04:58 pm
Powered by Dreamwidth Studios