2012-08-22 35 views
1

使用ServiceStack创建REST服务时,如何处理任意的HTTP动词?如何在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

ServiceStack的RestServiceBase类已经内置了支持GET,POST, PUSH,DELETE和PATCH。所以你可以重写它,就像你使用OnGet()方法一样,例如,你可以处理删除与请求:

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管道。

+0

谢谢。玩过了RequestFilter选项,但希望有一个更清晰的方法。任何计划在未来实施HEAD处理程序? – Farray

+0

唯一的问题是HEAD响应不应该有一个主体,在这种情况下,你的响应将被丢弃,唯一有效的返回类型将是一个'IHttpResult',因此它可以编写任何设置的自定义标题,并且忽略响应。我们会在这里添加一些支持... – mythz

相关问题