首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在ApiController中使用Elmah.MVC?

如何在ApiController中使用Elmah.MVC?
EN

Stack Overflow用户
提问于 2014-06-17 15:05:19
回答 2查看 931关注 0票数 2

我需要记录来自ApiController的异常。

安装Elmah.MVC后,我可以在数据库中记录404错误和其他错误,但ApiController中的异常不会在Elmah中显示ups。

你知道怎么解决这个问题吗?

代码语言:javascript
运行
复制
  <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);   
    }
}
EN

回答 2

Stack Overflow用户

发布于 2014-06-17 20:35:06

有一个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)。

票数 7
EN

Stack Overflow用户

发布于 2014-06-17 15:18:09

我已经解决了为Elmah创建自定义属性并将其添加到Global.asax.cs问题

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24257616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档