servicestack - ServiceStack 中的 REST 路由

标签 servicestack

我刚开始学习 REST 和 ServiceStack,还有一些关于 Route 的东西我只是不太明白。例如,如果我们从 GitHub 教程中获取非常基本的 HelloWorld 示例并重新编写它以返回 User 的集合对象。这是示例:

public User
{
    public string Name;
    public string Address;
    public int Age;
}


// Hello - request object without [Route] attribute
public class Hello
{
   public string Name { get; set; }
}

public class HelloResponse
{
   public IEnumerable<User> Result {get;set;}
}


public class HelloService : Service
{
   public object Any(Hello request)
   {
       return new HelloResponse { // Collection of User object };
   }
} 

现在一切正常,这里没有问题。但现在我想添加另一个路由 url,如:/Hello/{name}/Address
实际上,对这个 url 的调用 (GET) 将返回一个 UserAge 选择范围。我怎么能做到这一点?我应该添加另一个Service ?如果网址是:
/Hello/{name}/{age}/Address
好像有什么没看懂。。。。。。

最佳答案

有关 Routing in ServiceStack 的详细信息,请参阅此较早的答案. ServiceStack's New API 中的智能路由部分解释更多选项和不同的优先级。

您的示例存在一些问题。第一个 ServiceStack 文本序列化器仅支持 公共(public)属性 所以您需要更改您的用户模型以使用公共(public)属性而不是字段,例如:

public User
{
    public string Name { get; set; }
    public string Address { get; set; }
    public int Age { get; set; }
}

接下来,Interfaces on DTOs are a bad idea因为没有充分的理由。它们仍然受支持,但最终可能会产生不良结果。使用像 List<T> 这样的具体集合它提供了更多的实用程序,例如:
public class HelloResponse
{
    public List<User> Results { get; set; }
}

还有路线应该匹配 DTO 上的属性名称 正是 ,它们在匹配请求路径时不区分大小写,但它们需要映射到确切的属性名称,例如:
/Hello/{Name}/{Age}/Address

关于servicestack - ServiceStack 中的 REST 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13904477/

相关文章:

asp.net-core - ServiceStack - 即使使用 JsConfig,年、月和日参数也描述了无法表示的日期时间

RedisMQ PriorityQueue 中的 Servicestack 内部优先级

authentication - 如何禁用 redis 将自动 session 存储到数据库?

c# - 返回 FileInfo HttpResult 时写入 header 时出错

c# - 无法反序列化数组

c# - 将自定义路由映射到嵌套对象属性

asp.net - Redis 框架的服务堆栈许可证

c# - ServiceStack 3.9.71 中缺少类型

import - 服务堆栈 Swagger 2.0 和 Azure Api 管理导入

servicestack - OrmLite 动态数据库模式