Я впервые изучаю ELMAH, но имею требование, которое необходимо выполнить, чтобы я не знал, как это сделать ...ELMAH - Использование пользовательских страниц ошибок для сбора отзывов пользователей
В принципе, я собираюсь настроить ELMAH для работы с asp.net MVC и заставить его записывать ошибки в базу данных, когда они происходят. В дополнение к этому я использую customErrors, чтобы направить пользователя на дружественную страницу сообщения при возникновении ошибки. Довольно стандартно ...
Требование состоит в том, что на этой странице пользовательской ошибки у меня есть форма, которая позволяет пользователю предоставлять дополнительную информацию, если они того пожелают. Теперь проблема возникает из-за того, что на этом этапе ошибка уже зарегистрирована, и мне нужно связать зарегистрированную ошибку с обратной связью с пользователями.
Как правило, если я использовал свою собственную реализацию, после того, как я зарегистрирую ошибку, я передам идентификатор ошибки на страницу пользовательской ошибки, чтобы можно было создать ассоциацию. Но из-за того, как работает ELMAH, я не думаю, что то же самое вполне возможно.
Поэтому мне было интересно, как люди думали, что один может идти об этом ....
Приветствия
UPDATE:
Мое решение проблемы заключается в следующем:
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, чтобы иметь несколько запросов, чтобы иметь ошибки при той же время. Но вероятный капюшон этого события удален. И это решение не зависит от сеанса, что в нашем случае имеет важное значение, а также некоторые ошибки могут привести к прекращению сеансов и т. Д. Следовательно, почему этот подход хорошо сработал для нас.
ли вы получить эту работу? У меня та же проблема. Я последовал за советом Атифа, но когда я ссылаюсь на HttpContext.Items для Elmah Id на моей странице пользовательских ошибок, я получаю исключение с нулевой ссылкой. –
@ Ronnie Overby: См. Выше edit. –
Спасибо. Я думал о том, чтобы делать что-то подобное, но используя комбинацию cookie/ipaddress в качестве идентификатора. В конечном счете я просто сделал это: http://stackoverflow.com/questions/2885487/problem-passing-elmah-log-id-to-custom-error-page-in-asp-net/2906440#2906440 –