首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebJob和ExceptionFilterAttribute

WebJob和ExceptionFilterAttribute
EN

Stack Overflow用户
提问于 2018-02-03 16:25:37
回答 2查看 649关注 0票数 1

对于我的web应用程序,我使用ExceptionFilterAttribute捕获不同的未处理异常,即:

代码语言:javascript
复制
public class InvalidDriverExceptionAttribute : ExceptionFilterAttribute
{
    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        if (actionExecutedContext.Exception != null)
        {
            if (actionExecutedContext.Exception is Domain.InvalidDriverException)
            {
                var resp = actionExecutedContext.Request.CreateErrorResponse(HttpStatusCode.NotFound, "User is not a driver");
                actionExecutedContext.Response = resp;
            }
        }

        //base.OnException(actionExecutedContext);
    }
}

但我想有类似的引擎我的网络工作。有可能吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-16 15:24:51

我已经从FunctionExceptionFilterAttribute创建了派生类。

代码语言:javascript
复制
public class ErrorHandlerAttribute : FunctionExceptionFilterAttribute
{

    public override async Task OnExceptionAsync(FunctionExceptionContext exceptionContext, CancellationToken cancellationToken)
    {
        string body = $"ErrorHandler called. Function '{exceptionContext.FunctionName}': {exceptionContext.FunctionInstanceId} failed. ";
        CombineErrorWithAllInnerExceptions(exceptionContext.Exception, ref body);

        string[] emailList = System.Configuration.ConfigurationManager.AppSettings["SendErrorEmails"].Split(';');

        await SendEmail.SendErrorNotificationAsync("WebJob - Common Driver Error", body);
    }

    private void CombineErrorWithAllInnerExceptions(Exception ex, ref string error)
    {
        error += $"ExceptionMessage: '{ex.Message}'.";
        if (ex is Domain.BadStatusCodeException)
        {
            error += $"Status code: {((Domain.BadStatusCodeException)ex).StatusCode}";
        }

        if (ex.InnerException != null)
        {
            error += $"InnerEx: ";
            CombineErrorWithAllInnerExceptions(ex.InnerException, ref error);
        }
    }
}

然后将其用于方法:

代码语言:javascript
复制
    [NoAutomaticTrigger]
    [ErrorHandler]
    public async Task GetDriversAsync(TextWriter logger)
    {

当异常发生时,它会调用此代码并向我发送通知电子邮件。

票数 1
EN

Stack Overflow用户

发布于 2018-02-05 02:33:02

但我想有类似的引擎我的网络工作。有可能吗?

是。但是,由于web作业是连续的或计划的,所以它们的实现方式有一些不同。您可以使用ErrorTrigger来实现您的目标。一个错误触发器,允许您在错误发生时为运行时自动调用注释函数。当executed.My演示结果如下:过滤器空异常时,它可以监视web作业中的错误。有关更多细节,您可以参考此文章

在使用Azure WebJob开发作业时,最好是在执行作业时出错时实现错误监视。 WebJobs ErrorTrigger扩展是核心扩展的一部分,它将帮助我们实现这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48599475

复制
相关文章

相似问题

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