HTTP Service在ServiceStack服务和DTO路由
问题描述:
我是ServiceStack的新手。从wiki中,Service类具有Any,Get..etc HTTP Verb函数来获取DTO对象。 DTO routing可以将HTTP动词限制为路由。这些Service和DTO路由如何协同工作或者做这两个HTTP Verb限制多大?HTTP Service在ServiceStack服务和DTO路由
例如,如果服务只有Get函数,但DTO具有Put限制,是否表示没有路由匹配?
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; }
}
我在哪里可以找到关于这些的更多信息?
谢谢,
答
您的自定义路由和服务实现访问权限已解耦。路由定义了什么样的自定义路由可以用来调用您的服务,同时您的服务实现定义了您的服务可以处理的请求。
注意:您的服务不限于并且可以在您的自定义路线之外被呼叫,例如,使用Pre-defined Routes,或Messaging,Service Gateway,当等
所以,你的路线defintions定义什么自定义路由允许,其中:
PUT /hello/foo
:
[Route("/hello/{Name}", "PUT")]
一个PUT
请求开始/hello
,例如仅匹配
但是,如果有人提出PUT /hello/foo
请求ServiceStack将抛出一个未实现的异常,因为它不会能够找到一个方法的工具ntation可以处理这对于一个PUT请求需要该请求之一:
public object Put(Hello request) { ... }
还是Any()
回退可处理上任何 HTTP动词的请求:
public object Any(Hello request) { ... }
除非你有多个实施相同的请求DTO,我建议坚持实施您的服务与Any()
,例如:
public object Any(Hello request) { ... }
通过这种方式,您的自定义路由可以限制允许的路由以及请求匹配时它将调用最匹配的实现或回退到Any()
实现。