这是在servicestack中处理HEAD请求的代码吗?

时间:2012-11-29 06:33:12

标签: servicestack

使用此参考 - 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.Add<dto1>("/GetMethod1", "GET");
Routes.Add<dto1>("/GetMethod1/Id/{ID}", "GET");
Routes.Add<dto2>("/GetMethod2", "GET");
Routes.Add<dto2>("/GetMethod2/Id/{ID}", "GET");

由于

1 个答案:

答案 0 :(得分:4)

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

除此之外,处理 HEAD 或其他不常见的HTTP方法请求的理想方法是使用ServiceStack's new and more flexible API,例如:

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

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

如果您想使用过滤器来处理它,那么您需要尽可能早地在Request Pipeline中处理它。有关用户定义的事件和过滤器执行的顺序,请参阅ServiceStack's Order of Operations