【问题标题】:Error handling from custom plugins自定义插件的错误处理
【发布时间】:2013-05-06 17:00:43
【问题描述】:

我正在为 servicestack 编写一个插件,我想利用服务内置的 error handling。这个想法是我想在处理路由之前执行一些逻辑,并可能返回 403 错误。我认为这样做的方法是添加一个RequestFilter 并从其中抛出一个UnauthorizedAccessException

但这不起作用,响应最终为空。看起来通常处理这些问题的 try/catch 不适用于RequestFiltersDtoUtils 有一个 HandleException() 方法,它会创建一个错误响应,但我不确定如何正确地将其添加到 RequestFilter 接收的 IHttpResponse 中。

我想知道是否有另一种方法可以添加路由前逻辑,您可以像从内部服务中一样抛出异常,或者是否有推荐的方法从 RequestFilter 创建错误响应。

编辑

我希望插件返回的错误与服务中抛出的异常返回的错误匹配(尽可能接近)。

DtoUtils.HandleException 看起来像 SS 构造响应的方式,但是当我尝试从插件中调用它时,它会抛出一个 StackOverflowException

var error = new HttpError(HttpStatusCode.Forbidden, "UnauthorizedAccessException", message);
//_appHost is stored by the original Register() call
var result = DtoUtils.HandleException(_appHost, request, error);
response.WriteToResponse(request, result);
response.EndServiceStackRequest();

【问题讨论】:

    标签: servicestack


    【解决方案1】:

    您正在使用请求过滤器,我怀疑您只是没有正确设置响应。

    我建议检查所需角色过滤器的工作原理并编写类似的内容。

    https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack.ServiceInterface/RequiredRoleAttribute.cs

    res.StatusCode = (int)HttpStatusCode.Forbidden;
    res.StatusDescription = "Invalid Role";
    res.EndServiceStackRequest();
    

    【讨论】:

    • 我试过这个,但响应与来自服务的正常异常响应有很大不同。从 jQuery 调用时很容易看到这一点,当你这样做时,jqXHR.responseText 是空的。对于普通的 ServiceStack 异常,responseText 包含序列化错误。
    【解决方案2】:

    我最终使用了这种方法,但我不确定它是否是最好的方法。它仍然不检查自定义全局错误处理程序,这将是理想的。

    response.WriteErrorToResponse(request,
                                  request.ResponseContentType,
                                  request.HttpMethod,
                                  message,
                                  new UnauthorizedAccessException(message),
                                  (int)HttpStatusCode.Forbidden);
    response.EndServiceStackRequest();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 2013-02-12
      • 2011-01-29
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多