我是ServiceStack的新手。在维基中,服务类具有用于获取DTO对象的Any,Get..etc HTTP谓词函数。DTO 路由可以将HTTP谓词限制为路由。这些服务和DTO路由是如何一起工作的,或者这两个HTTP动词限制是如何匹配的?
例如,如果服务只有Get功能,但DTO有放置限制,这是否意味着没有路由匹配?
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; }
}我在哪里可以找到更多关于这些的信息?
谢谢,
发布于 2016-08-03 07:53:09
您的自定义路由和服务实现访问是解耦的。路由定义了自定义路由可以用来调用您的服务,而您的服务实现定义了您的服务可以处理的请求。
注意:您的服务不限于并且可以在自定义路由之外调用,例如在使用预定义路线或消息传递、服务网关等时。
因此,您的路由定义定义了它允许的自定义路由,其中:
[Route("/hello/{Name}", "PUT")]只匹配以PUT开头的/hello请求,例如:
PUT /hello/foo但是,如果有人发出了PUT /hello/foo请求,ServiceStack将抛出一个未实现的异常,因为它将无法找到能够处理该请求的方法实现,对于PUT请求,需要这样做:
public object Put(Hello request) { ... }或者Any()回退,它可以处理上任何 HTTP谓词上的请求:
public object Any(Hello request) { ... }除非对于同一个请求DTO有多个实现,否则我建议坚持用Any()实现您的服务,例如:
public object Any(Hello request) { ... }这样,您的自定义路由就可以限制所允许的路由,并且当请求匹配时,它将调用最佳匹配的实现或回退到Any()实现。
https://stackoverflow.com/questions/38733315
复制相似问题