#c# #asp.net-mvc #elmah #elmah.mvc
#c# #asp.net-mvc #elmah #elmah.mvc
Вопрос:
Мне нужно регистрировать исключения из ApiController.
После установки Elmah.MVC я могу регистрировать ошибку 404 и другие в БД, но исключения в ApiController не отображаются в Elmah.
Есть идеи, как это исправить?
<modules>
<remove name="FormsAuthenticationModule" />
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
</modules>
<elmah>
<security allowRemoteAccess="yes" />
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="XXX"/>
</elmah>
public class StatusController : ApiController
{
private StatusBLL statusBLL = new StatusBLL();
// POST api/status
public void Post(StatusDTO status)
{
throw new ArgumentException("test elmah here");
if (!statusBLL.Register(status))
helpers.BusinessLayer.CreateResponseApiMessage(statusBLL.Errors);
}
}
Комментарии:
1. Похожие tugberkugurlu.com/archive/asp-net-web-api-and-elmah-integration
Ответ №1:
Для этого есть пакет NuGet: http://www.nuget.org/packages/Elmah .Contrib.WebAPI /
После установки вам необходимо добавить новый глобальный фильтр, как описано здесь: http://blog.elmah.io/logging-to-elmah-io-from-web-api / (просто установите Elmah.Contrib.Пакет WebAPI без elmah.io ).
Ответ №2:
Я решил свою проблему, создав пользовательский атрибут для Elmah и добавив его в Global.asax.cs
public class ElmahErrorAttribute : ExceptionFilterAttribute
{
public override void OnException(
System.Web.Http.Filters.HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Exception != null)
Elmah.ErrorSignal.FromCurrentContext().Raise(actionExecutedContext.Exception);
base.OnException(actionExecutedContext);
}
}
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register); // WebApi
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Configure(System.Web.Http.GlobalConfiguration.Configuration);
}
private void Configure(HttpConfiguration httpConfiguration)
{
httpConfiguration.Filters.Add(
new ElmahErrorAttribute()
);
}
}
Комментарии:
1. У вас уже есть атрибут HandleErrorAttribute, зарегистрированный в глобальных фильтрах?