如何在服务堆栈中完全禁用未捕获异常的响应正文(响应状态),但保留状态代码



我拥有什么和我想要实现什么的信息

我正在使用 ServiceStack 并根据需要启动并运行它,但是我无法找到如何为未捕获的异常禁用正文/内容。

我有服务堆栈处理所有路由。

如果我导航到未映射到 ServiceStack 的路由,我会得到 404(完美)的状态代码和"找不到请求处理程序:...."响应正文中的内容

如果我的代码抛出未捕获的异常,ServiceStack 将善意地返回相关的状态代码,但它也会返回填充了错误代码和消息的响应状态。

我关闭了调试模式,这会禁用 StackTrace,但是我想完全静音响应的整个正文以应对异常。

我试过什么

我尝试了以下响应过滤器:

ResponseFilters.Add((req, res, dto)) =>
{
    if (dto is Exception) res.Close();
});

不幸的是,它没有奏效。

我想避免什么

try{
    return service.GetResponse();
} catch (Exception) {
    return new HttpResult(.....);
}

我的问题

如何禁用所有未捕获异常的响应正文,但仍返回状态代码?我希望在正文中返回 null,并且状态代码保持原样。

试图把我的问题说清楚,但如果我有任何含糊不清的地方,请问我问题。

您应该能够通过覆盖ServiceBaseHandleException来覆盖默认的异常处理行为。

您可以在此处检查默认实现:https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceInterface/ServiceBase.cs#L228。

最新更新