ServiceStack Asp.NET Core的第三方异常处理挂钩?

时间:2017-04-20 17:22:57

标签: servicestack

我运行Exceptionless项目,我们有一些客户使用ServiceStack,我有一些问题和建议您的错误处理。目前,你们不会将异常流向asp.net核心中间件或任何diagnostics integrations,这是一个问题。有一个报告这些钩子的包可能会很好。相反,你吃了所有的例外,并调用两个处理程序之一:

ServiceExceptionHandlers.Add((httpReq, request, exception) => {
var contextData = new ContextData();
contextData.MarkAsUnhandledError();
contextData.SetSubmissionMethod("ServiceExceptionHandlers");
exception.ToExceptionless(contextData).Submit(); // TODO: figure out how to get the http context here for extra metadata.

return null; //continue with default Error Handling
});

//Handle Unhandled Exceptions occurring outside of Services
//E.g. Exceptions during Request binding or in filters:
UncaughtExceptionHandlers.Add((req, res, operationName, ex) => {
var contextData = new ContextData();
contextData.MarkAsUnhandledError();
contextData.SetSubmissionMethod("UncaughtExceptionHandlers");
ex.ToExceptionless(contextData).SetProperty("Operation", operationName).Submit(); // TODO: figure out how to get the http context here for extra metadata.

// TODO: See if we have to do this,, rather just fallback and let them handle it.
res.Write("Error: {0}: {1}".Fmt(ex.GetType().Name, ex.Message));
res.EndRequest(skipHeaders: true);
});

你可以看到我不想打断我想记录并继续的任何工作流程......有没有一个好方法可以实现这个目标?

此外,我如何才能访问http上下文(您传入请求,响应和异常,但没有其他内容)。我知道它已被抽象出来了,这里没有任何上下文,也许可能有一些属性我可以查看来获取上下文?我想要这个,所以我可以捕获更多的元数据(请求,用户等...)

1 个答案:

答案 0 :(得分:3)

请注意,您的问题似乎直接针对ServiceStack,但它已发布在公共StackOverflow论坛上,应该解决并向愿意提供帮助的任何人开放。

  

我不想打断任何我想记录并继续

的工作流程

如果您不想中断null中的工作流程返回ServiceExceptionHandlers,请不要在UncaughtExceptionHandlers中写入或终止回复,即:

//res.Write("Error: {0}: {1}".Fmt(ex.GetType().Name, ex.Message));
//res.EndRequest(skipHeaders: true);
  

如何访问http上下文

您可以通过以下方式获取基础.NET核心请求:

var origReq = req.OriginalRequest as HttpRequest;
var httpCtx = origReq.HttpContext;

与响应相同:

var origRes = res.OriginalResponse as HttpResponse;