gpt4 book ai didi

servicestack - RestServiceBase 上的 ServiceExceptionHandler 用法

转载 作者:行者123 更新时间:2023-12-05 00:32:42 25 4
gpt4 key购买 nike

我正在尝试使用 ServiceExceptionHandler在我的服务上扩展 RestServiceBase<TViewModel>
我可以使用 AppHost.ServiceExceptionHandler ,这工作正常。我需要来自 HttpRequest 的用户信息,这在 AppHost 级别不可用。

所以我试图使用 ServiceExceptionHandler在服务水平上。虽然我将代表设置为服务 ctor ,它是 nullOnGet 上抛出异常时方法

public class StudentService : RestServiceBase<Student>
{
public StudentService()
{
ServiceExceptionHandler = (request, exception) =>
{
logger.Error(string.Format("{0} - {1} \n Request : {2}\n", HttpRequest.UserName(), exception.Message, request.Dump()), exception);
var errors = new ValidationErrorField[] { new ValidationErrorField("System Error", "TODO", "System Error") };
return DtoUtils.CreateErrorResponse("System Error", "System Error", errors);
};
}
}

我不确定这段代码有什么问题。任何帮助将不胜感激。

最佳答案

注册全局 AppHost.ServiceExceptionHandler

在您的 AppHost.Configure()你可以注册一个全局异常处理程序:

this.ServiceExceptionHandler = (request, ex) => {
... //handle exception and generate your own ErrorResponse
};

对于更细粒度的异常处理程序,您可以覆盖以下自定义服务事件 Hook :

使用新 API 处理异常

如果您使用的是 New API您可以通过提供自定义运行器来覆盖异常,例如:
public class AppHost { 
...
public virtual IServiceRunner<TRequest> CreateServiceRunner<TRequest>(
ActionContext actionContext)
{
//Cached per Service Action
return new ServiceRunner<TRequest>(this, actionContext);
}
}

public class MyServiceRunner<T> : ServiceRunner<T> {
public override object HandleException(
IRequestContext requestContext, TRequest request, Exception ex) {
// Called whenever an exception is thrown in your Services Action
}
}

使用旧 API 处理异常
RestServiceBase<T>使用旧 API,您可以通过覆盖 来处理错误。处理异常 方法,例如:
public class StudentService : RestServiceBase<Student>
{
...

protected override object HandleException(T request, Exception ex)
{
LogException(ex);

return base.HandleException(request, ex);
}
}

关于servicestack - RestServiceBase<T> 上的 ServiceExceptionHandler 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13058205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com