ELMAH - Используя пользовательские ошибочные страницы к собирающимся отзывам пользователей

Я смотрю на использование ELMAH впервые, но имею требование, которому нужно отвечать, что я не уверен, как пойти о достижении...

В основном я собираюсь настроить ELMAH, чтобы работать в соответствии с asp.net MVC и заставить его регистрировать ошибки к базе данных, когда они происходят. Вдобавок к этому я использовать customErrors для направления пользователя к дружественной странице сообщения, когда ошибка происходит. Довольно стандартный материал...

Требование - то, что на этой пользовательской ошибочной странице у меня есть форма, которая включает пользователю для предоставления дополнительной информации, если они желают. Теперь проблема возникает вследствие того, что в этой точке ошибка уже зарегистрирована, и я должен связать зарегистрированную ошибку с пользовательской обратной связью.

Обычно, если бы я использовал свою собственную реализацию, после того, как я регистрирую ошибку, я прошел бы через идентификатор ошибки к пользовательской ошибочной странице так, чтобы ассоциация могла быть сделана. Но из-за способа, которым работает ELMAH, я не думаю, что то же довольно возможно.

Следовательно я задавался вопросом, как люди думали, что можно было бы пойти о выполнении этого....

Удачи

ОБНОВЛЕНИЕ:

Мое решение проблемы следующие:

public class UserCurrentConextUsingWebContext : IUserCurrentConext
{
    private const string _StoredExceptionName = "System.StoredException.";
    private const string _StoredExceptionIdName = "System.StoredExceptionId.";

    public virtual string UniqueAddress
    {
        get { return HttpContext.Current.Request.UserHostAddress; }
    }

    public Exception StoredException
    {
        get { return HttpContext.Current.Application[_StoredExceptionName + this.UniqueAddress] as Exception; }
        set { HttpContext.Current.Application[_StoredExceptionName + this.UniqueAddress] = value; }
    }

    public string StoredExceptionId
    {
        get { return HttpContext.Current.Application[_StoredExceptionIdName + this.UniqueAddress] as string; }
        set { HttpContext.Current.Application[_StoredExceptionIdName + this.UniqueAddress] = value; }
    }
}

Затем, когда ошибка происходит, у меня есть что-то вроде этого в моем Global.asax:

public void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args)
{
    var item = new UserCurrentConextUsingWebContext();
    item.StoredException = args.Entry.Error.Exception;
    item.StoredExceptionId = args.Entry.Id;
} 

Затем, где когда-либо Вы позже, можно вытащить детали

    var item = new UserCurrentConextUsingWebContext();
    var error = item.StoredException;
    var errorId = item.StoredExceptionId;
    item.StoredException = null;
    item.StoredExceptionId = null;

Обратите внимание, что это не на 100% прекрасно как его возможное для того же IP, чтобы иметь несколько запросов, чтобы иметь ошибки одновременно. Но вероятный капот того случая является удаленным. И это решение независимо от сессии, которая в нашем случае важна, также некоторые ошибки могут заставить сессии быть завершенными и т.д. Следовательно, почему этот подход работал приятно на нас.

8
задан vdh_ant 26 May 2010 в 05:34
поделиться

1 ответ

ErrorLogModule в ELMAH (на момент написания статьи 1.1) предоставляет Logged событие, которое можно обработать в Global.asax и которое можно использовать для передачи подробной информации, например, через HttpContext.Items коллекцию, на вашу пользовательскую страницу ошибок. Если вы зарегистрировали ErrorLogModule под именем ErrorLog в web.config, то ваш обработчик событий в Global.asax будет выглядеть следующим образом:

void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args)  
{ 
    var id = args.Entry.Id
    // ...  
}
9
ответ дан 5 December 2019 в 19:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: