3

我正在尝试使用 ServiceStack.Razor 让一个最小的应用程序工作,但我无法让 CustomHttpHandler 工作。我已按照此处此处的说明进行操作,但无法正常工作。

我正在使用以下代码为以下代码注册一个自定义 http 处理程序HttpStatusCode.BadRequest

public override void Configure(Container container)
{
    this.Plugins.Add(new RazorFormat());
    this.SetConfig(new EndpointHostConfig
    {
        CustomHttpHandlers =
        {
            { HttpStatusCode.NotFound, new RazorHandler("/notfound") }, 
            { HttpStatusCode.BadRequest, new RazorHandler("/error") }
        }, 
        DebugMode = true
     });
}

问题是,/notfound处理程序完美地适用于 404,但无论我做什么,我都无法在抛出/erroran 时显示剃刀文件。ArgumentNullException

我的服务方法如下所示:

public object Any(Hello request)
{
    if (string.IsNullOrEmpty(request.Name))
    {
        throw new ArgumentNullException("Name");
    }

    return new HelloResponse { Result = "Hello " + request.Name };
}

ServiceStack 返回 400 状态,这很好,但它仍然显示我拥有的视图HelloResponse

400 错误请求

我错过了什么?我是否误解了 CustomHttpHandlers 应该如何工作?

作为参考,我把项目放在了 github 上

4

1 回答 1

1

是的,CustomHttpHandlers 只是用于处理未处理的系统生成的错误。目前,它们仅限于:

  • NotFound (404)用于未处理的请求
  • 对禁止的文件或资源发出请求时禁止 (403)

这些是发生在 ServiceStack 之外的错误,因此无法由现有 ServiceStack 的事件挂钩或用户定义的自定义逻辑处理,因此我们允许用户在这种情况下通过CustomHttpHandlers.

错误处理 wiki描述了如何处理 ServiceStack 中的错误。

尽管在处理异常后允许回退以允许通过将其呈现到用户指定的页面来进一步处理它可能是有意义的(因为它是选择加入的),但您希望在此处执行此操作。

我们将着眼于在未来尝试探索类似的东西。随意将这些未来的功能请求添加到ServiceStack 的问题列表中,这样我们就不会忘记。

于 2012-12-04T00:46:12.290 回答