我刚刚开始学习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 };
}
}
Run Code Online (Sandbox Code Playgroud)
现在一切正常,没有问题.但现在我想添加另一个路由网址: /Hello/{name}/Address
实际上,对此url的此调用(GET)将返回User由Age参数选择的单个.我怎么能这样做?我应该添加另一个Service?如果网址是:
/Hello/{name}/{age}/Address
看来我听不懂......
有关ServiceStack 中的路由的详细信息,请参阅之前的答案。ServiceStack 的新 API中的智能路由部分解释了更多选项和不同的优先级。
您的示例存在一些问题。第一个 ServiceStack 文本序列化程序仅支持公共属性,因此您需要更改用户模型以使用公共属性而不是字段,例如:
public User
{
public string Name { get; set; }
public string Address { get; set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
其次,DTO 上的接口是一个坏主意,因为没有充分的理由这样做。它们仍然受到支持,但您最终可能会得到不良结果。使用像 a 这样的具体集合,List<T>它提供了更多实用性,例如:
public class HelloResponse
{
public List<User> Results { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
此外,路由应该与 DTO 上的属性名称完全匹配,它们在与请求路径匹配时不区分大小写,但它们需要映射到确切的属性名称,例如:
/Hello/{Name}/{Age}/Address
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2383 次 |
| 最近记录: |