3

使用此参考 - https://github.com/ServiceStack/ServiceStack/wiki/Request-and-response-filters

现在在我当前的实现中,任何传入的 HEAD 请求都会收到 404 状态码。我想返回 200 作为 HEAD 请求的状态码,因此客户端将进一步为实际输出发出 GET 请求。

显然我下面的代码在 AppHost 中是错误的,仍然返回 404,请纠正我。

     this.RequestFilters.Add((httpReq, httpResp, requestDto) =>
        {

        });

        this.ResponseFilters.Add((req, res, dto) =>
        {
            if (req.HttpMethod == "HEAD") res.StatusCode = 200;
        });

问题 2:这个单一的代码实现是否足以满足 AppHost 中定义的所有 Routes。

Routes.Add<dto1>("/GetMethod1", "GET");
Routes.Add<dto1>("/GetMethod1/Id/{ID}", "GET");
Routes.Add<dto2>("/GetMethod2", "GET");
Routes.Add<dto2>("/GetMethod2/Id/{ID}", "GET");

谢谢

4

1 回答 1

4

看起来您使用的是旧版本的 ServiceStack,所以我首先建议升级到最新版本。

除此之外,处理HEAD或其他不常见的 HTTP 方法请求的理想方法是使用ServiceStack 的新的更灵活的 API,例如:

public void Head(GetMethod request) {
    base.Response.StatusCode = 200;
}

但是只要有实现就足够了,所以你可以有一个空的身体。即设置200状态代码是多余的,因为它是默认状态代码。

如果您想使用过滤器一般地处理它,那么您将希望尽可能早地在请求管道中处理它。有关用户定义的事件和过滤器的执行顺序,请参阅ServiceStack 的操作顺序。

于 2012-11-30T17:46:12.720 回答