如何在ServiceStack中的自定义异常处理程序中访问Request对象

时间:2013-05-08 17:00:02

标签: c# rest exception-handling servicestack

我想在ServiceStack中注册一个自定义异常处理程序。 https://github.com/ServiceStack/ServiceStack/wiki/Error-Handling的维基说:

this.ServiceExceptionHandler = (request, exception) => {
    //log your exceptions here
    ...
    //call default exception handler or prepare your own custom response
    return DtoUtils.HandleException(this, request, exception);
};

但是在我的异常处理程序中,request参数不是Request对象,而是抛出异常的Service(至少我从调试器中可以看出)。将request转换为IHttpRequest会因InvalidCast异常而失败。由于Request的{​​{1}} / Response成员受到保护,因此我无法从异常处理程序中访问请求。

如何访问请求?特别是,我需要访问Service以及在请求中作为标题发送的已接受语言列表。

1 个答案:

答案 0 :(得分:1)

通过查看来源,看起来request应该是请求dto,但如果您需要更多,则可以创建自己的ServiceRunner<T>,然后您将获得{{} 1}},也有IRequestContext属性。

https://github.com/ServiceStack/ServiceStack/wiki/Error-Handling#fine-grain-error-handling-using-the-new-apis-servicerunner

编辑,更多信息:

当您覆盖ContentType时,您可以返回HandleException,这样您就可以设置标题和HttpError等内容。