1

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

似乎只要服务堆栈在路由中看到 *,它就会吃掉所有东西到路径的尽头?

因此,所有这些示例 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 }
}

谢谢,达米安

4

1 回答 1

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>());
        }
    }
    ...
}
于 2013-05-17T14:18:28.023 回答