MVC3 + ELMAH перейти к деталям ошибки?

Мое приложение: VS2010, MVC3, C #, последняя версия ELMAH.

Случай: возникают некоторые ошибки (например, пустая ссылка), отображается настраиваемая страница ошибок (customErrors mode = "On").

Задача: разрешить администраторам (пользователям в роли администраторов) просматривать сведения об ошибках на настраиваемой странице ошибок.

Вопрос: как получить / передать идентификатор ошибки elmah в пользовательский просмотр страницы ошибок?

Upd: связанный ответ на вопрос: ELMAH - Использование настраиваемых страниц ошибок для сбора отзывов пользователей

Пример настраиваемой страницы с ошибкой:

@model System.Web.Mvc.HandleErrorInfo
@{
  ViewBag.Title = "Error";
}
<h2>
  Error processing a request.
  @if (User.IsInRole(MyAppNamespace.Constants.ROLE_ADMIN))
  {
    // where to obtain ELMAH error id to navigate to error details ?
    // elmah/detail?id=291f5e83-5756-43bf-a889-07a548727da7
    <a href="@Url.Content("~/elmah")">View error details</a>
  }
</h2>

person user861768    schedule 26.07.2012    source источник
comment
Было бы проще отобразить @Model.Exception.ToString() вместо ссылки на страницу ошибок elmah. Elmah добавляет много информации о вашей среде, но если вы смотрите на ошибку, когда она возникает, я не уверен, что это необходимо.   -  person jrummell    schedule 26.07.2012


Ответы (2)


Это событие в модуле Elmah ErrorLog, которое можно обработать в Global.asax.cs:

protected void ErrorLog_Logged(object sender, ErrorLoggedEventArgs args)
{
    Session["ElmahId"] = args.Entry.Id;
}

Затем мы можем использовать сохраненный идентификатор для перехода к ошибке (я использую модуль Elmah.Mvc, который реализует специальный контроллер вместо страниц elmah по умолчанию). В Error.cshtml:

@if (User.IsInRole(renweb.Constants.ROLE_ADMIN))
{
      <a href="@Url.Action("Detail","Elmah",new{id=@Session["ElmahId"]})">Error details</a>
}
person user861768    schedule 26.07.2012

Насколько мне известно, все ошибки Elmah сохраняются в таблице под названием EMAH_Error.

Итак, одна вещь, которую вы могли бы сделать, - это получить текущую дату и время, когда произошла ошибка, и запросить таблицу для записей, сохраненных в это время, дайте / возьмите 1 минуту. Запрос вернет ошибку, сохраненную с соответствующей отметкой времени, которая также будет содержать ErrorId.

Вы можете легко использовать EF или что-то еще для создания и сущности ElmahError.

person Vasile Laur    schedule 26.07.2012