gpt4 book ai didi

servicestack - ServiceStack 服务和 DTO 路由中的 HTTP 动词

转载 作者:行者123 更新时间:2023-12-01 04:54:01 28 4
gpt4 key购买 nike

我是 ServiceStack 的新手。来自 wiki ,Service类有Any、Get..等HTTP Verb函数来获取DTO对象。 DTO routing可以有 HTTP Verb 来限制路由。这些 Service 和 DTO 路由如何协同工作,或者这两个 HTTP Verb 限制如何匹配?

例如,如果服务只有 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 , 等等。

所以你的路由定义定义了它允许的自定义路由,其中​​:

[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()执行。

关于servicestack - ServiceStack 服务和 DTO 路由中的 HTTP 动词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38733315/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com