首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ServiceStack服务和DTO路由中的HTTP谓词

问ServiceStack服务和DTO路由中的HTTP谓词
EN

Stack Overflow用户
提问于 2016-08-03 02:18:45
回答 1查看 172关注 0票数 4

我是ServiceStack的新手。在维基中,服务类具有用于获取DTO对象的Any,Get..etc HTTP谓词函数。DTO 路由可以将HTTP谓词限制为路由。这些服务和DTO路由是如何一起工作的,或者这两个HTTP动词限制是如何匹配的?

例如,如果服务只有Get功能,但DTO有放置限制,这是否意味着没有路由匹配?

代码语言:javascript
复制
public class HelloService : Service
{
    public object Get(Hello request)
    {
        return new HelloResponse { Result = "Hello, " + request.Name };
    }
}

[Route("/hello/{Name}", "PUT")]
public class Hello
{
    public string Name { get; set; }
}

我在哪里可以找到更多关于这些的信息?

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-03 07:53:09

您的自定义路由和服务实现访问是解耦的。路由定义了自定义路由可以用来调用您的服务,而您的服务实现定义了您的服务可以处理的请求。

注意:您的服务不限于并且可以在自定义路由之外调用,例如在使用预定义路线或消息传递、服务网关等时。

因此,您的路由定义定义了它允许的自定义路由,其中:

代码语言:javascript
复制
[Route("/hello/{Name}", "PUT")]

只匹配以PUT开头的/hello请求,例如:

代码语言:javascript
复制
 PUT /hello/foo

但是,如果有人发出了PUT /hello/foo请求,ServiceStack将抛出一个未实现的异常,因为它将无法找到能够处理该请求的方法实现,对于PUT请求,需要这样做:

代码语言:javascript
复制
public object Put(Hello request) { ... }

或者Any()回退,它可以处理上任何 HTTP谓词上的请求:

代码语言:javascript
复制
public object Any(Hello request) { ... }

除非对于同一个请求DTO有多个实现,否则我建议坚持用Any()实现您的服务,例如:

代码语言:javascript
复制
public object Any(Hello request) { ... }

这样,您的自定义路由就可以限制所允许的路由,并且当请求匹配时,它将调用最佳匹配的实现或回退到Any()实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38733315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档