我是ServiceStack的新手。从wiki开始,Service类具有Any,Get..etc HTTP Verb函数来获取DTO对象。 DTO routing可以使用HTTP Verb来限制路由。这些服务和DTO路由如何协同工作或这两个HTTP动词限制匹配多少?
例如,如果服务只有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; }
}
我在哪里可以找到有关这些的更多信息?
谢谢,
答案 0 :(得分:1)
您的自定义路由和服务实施访问是分离的。路由定义了什么自定义路由可用于调用您的服务,而您的服务实现定义了您的服务可以处理的请求。
注意:您的服务不仅限于并且可以在自定义路线之外调用,例如使用Pre-defined Routes或Messaging,Service Gateway等时
因此,您的路线定义定义了它允许的自定义路线,其中:
[Route("/hello/{Name}", "PUT")]
仅匹配以PUT
开头的/hello
请求,例如:
PUT /hello/foo
但是如果有人发出PUT /hello/foo
请求ServiceStack将抛出一个Not Implemented Exception,因为它无法找到一个可以处理该请求的方法实现,该请求对于PUT请求必须是:
public object Put(Hello request) { ... }
或Any()
后备可以处理 ANY HTTP谓词上的请求:
public object Any(Hello request) { ... }
除非您对同一个请求DTO有多个实施,否则我建议坚持使用Any()
来实施您的服务,例如:
public object Any(Hello request) { ... }
这样,您的自定义路由可以限制允许的路由,当请求匹配时,它将调用最佳匹配实现或回退到Any()
实现。