我正在尝试创建一组包含通配符的服务堆栈路由 我无法更改它,因为响应的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 }
}
感谢, 达米安
答案 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>());
}
}
...
}