使用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但未找到任何表明正确方法的内容。)
答案 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服务中处理此问题,因此您需要在RequestFilter或RequestFitler Attribute中处理它(确保关闭httpRes以终止请求)
您还可以通过在AppHost的EndpointHostConfig.RawHttpHandlers配置中注册自己的自定义IHttpHandler来完全绕过ServiceStack管道。