5

我刚开始学习 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

好像有什么没看懂。。。。。。

4

1 回答 1

3

有关ServiceStack 中路由的详细信息,请参阅这个较早的答案。ServiceStack 的新 API中的智能路由部分解释了更多选项和不同的优先级。

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

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

接下来,DTO 上的接口是一个坏主意,因为没有充分的理由。它们仍然受支持,但最终可能会产生不良结果。使用像 aList<T>这样提供更多实用程序的具体集合,例如:

public class HelloResponse
{
    public List<User> Results { get; set; }
}

此外,路由应与您的 DTO 上的属性名称完全匹配,在匹配请求路径时它们不区分大小写,但它们需要映射到确切的属性名称,例如:

/Hello/{Name}/{Age}/Address
于 2012-12-16T20:30:24.557 回答