【问题标题】:How do I use an arbitrary HTTP verb in a ServiceStack REST service?如何在 ServiceStack REST 服务中使用任意 HTTP 动词?
【发布时间】:2012-08-22 15:54:28
【问题描述】:

使用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,但没有找到任何表明正确方法的内容。)

【问题讨论】:

    标签: rest servicestack


    【解决方案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 管道。

    【讨论】:

    • 谢谢。玩弄了 RequestFilter 选项,但希望有一种更清洁的方式。有计划在未来实施 HEAD 处理程序吗?
    • 唯一的问题是 HEAD 响应不应该有正文,在这种情况下您的响应将被丢弃,唯一有效的返回类型将是 IHttpResult 所以它可以写任何设置的自定义标头,并忽略响应。我们将在这里添加一些支持...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2015-02-16
    • 2012-08-28
    相关资源
    最近更新 更多