如何在ServiceStack REST服务中使用任意HTTP谓词?

时间:2012-08-22 15:54:28

标签: rest servicestack

使用ServiceStack创建REST服务时,如何处理任意HTTP动词?

最常见的动词有非常简单的方法。例如,要处理GET请求,我会执行以下操作:

public class MyService : RestServiceBase<MyRequest>
{
    public override object OnGet(MyRequest request){
        //do stuff and return HttpResult or object for serialization
    }
}

PUT,POST,DELETE和PATCH存在类似的覆盖。

如果我想使用HEAD或其他动词,该怎么办?

(我查看了文档和示例以及other ServiceStack questions但未找到任何表明正确方法的内容。)

1 个答案:

答案 0 :(得分:1)

ServiceStack的RestServiceBase类已经内置了对GET,POST,PUSH,DELETE和PATCH的支持。所以你只需像你的OnGet()方法一样覆盖它,例如您可以使用以下方式处理DELETE请求:

public override object OnDelete(MyRequest request){
    //do stuff and return HttpResult or object for serialization
}

对于HEAD请求,您当前无法在ServiceStack服务中处理此问题,因此您需要在RequestFilterRequestFitler Attribute中处理它(确保关闭httpRes以终止请求)

您还可以通过在AppHost的EndpointHostConfig.RawHttpHandlers配置中注册自己的自定义IHttpHandler来完全绕过ServiceStack管道。