我刚开始学习 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) 将返回一个
User
由 Age
选择范围。我怎么能做到这一点?我应该添加另一个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/