servicestack创建到不同DTO的通配符路由

时间:2013-05-17 08:45:29

标签: servicestack

我正在尝试创建一组包含通配符的服务堆栈路由 我无法更改它,因为响应的Url是由另一个产品定义的。

一旦服务堆栈看到路线中的*,它就会把所有东西都吃到路径的尽头?

因此,所有这些示例网址似乎都被路由为目录请求,而不是第二种情况下的查看请求

http://domain/rest/folder1
http://domain/rest/folder1/damian/View

是否可以在通配符之后使智能路由文字加权检测文字?

我猜当它从左到右击中一个通配符时,它必须跳到从右到左解析到通配符,并且通配符是剩下的?

例如

[Route("/rest/{Folder*}/{Name}/View")]
public class ViewRequest
{
    public string Folder { get; set }
    public string Name { get; set; }
}

[Route("/rest/{Folder*}")]
public class CatalogRequest
{
    public string Folder { get; set }
}

感谢, 达米安

1 个答案:

答案 0 :(得分:1)

  

是否可以在通配符之后使智能路由文字加权检测文字?

没有。通配符必须是路由中的最后一个元素,它将PathInfo的剩余部分与选定变量匹配,例如:

这是有效的:

[Route("/rest/{Folder*}")]
public class CatalogRequest { ... }

这不是:

Route("/rest/{Folder*}/{Name}/View")]
public class ViewRequest { ... }

在您的服务中,您仍然可以使用服务中的值并根据该逻辑调用其他服务,例如:

public object Get(CatalogRequest request)
{
    if (request.Folder.SplitOnLast('/').Last() == "View")
    {
        using (var service = base.ResolveService<ViewService>())
        {
            return service.Get(request.TranslateTo<ViewRequest>());
        }
    }
    ...
}