servicestack,Routes,servicestack" /> servicestack,Routes,servicestack" />

Routes ServiceStack查询字符串映射

Routes ServiceStack查询字符串映射,routes,servicestack,Routes,servicestack,我很好奇是否可以修改servicesstack路由映射规则。 我希望非查询字符串参数进入模型的一个区域,而查询字符串参数进入另一个区域 具体而言,我有以下路线: [Route("/gis/services/{Folders*}/{ServiceName}/{ServiceType}/{LayerId}/query", HttpMethods.Get)] public class Model : Envelope<Request> { } [Route(“/gis/services/

我很好奇是否可以修改servicesstack路由映射规则。 我希望非查询字符串参数进入模型的一个区域,而查询字符串参数进入另一个区域

具体而言,我有以下路线:

[Route("/gis/services/{Folders*}/{ServiceName}/{ServiceType}/{LayerId}/query", HttpMethods.Get)]
public class Model : Envelope<Request>
{
}
[Route(“/gis/services/{Folders*}/{ServiceName}/{ServiceType}/{LayerId}/query”,HttpMethods.Get)]
公共类模型:信封
{
}
信封的定义如下:

    public class Envelope<T>
    {
        public string Folders { get; set; }
        public string ServiceType { get; set; }
        public string ServiceName { get; set; }
        public int LayerId { get; set; }
        public T Payload { get; set; }
    }
公共类信封
{
公共字符串文件夹{get;set;}
公共字符串服务类型{get;set;}
公共字符串ServiceName{get;set;}
public int LayerId{get;set;}
公共T有效载荷{get;set;}
}

如何将查询字符串参数映射到有效负载中,并使其他所有内容(文件夹、ServiceType、ServiceName、LayerId)映射为正常情况?

只有请求的路径信息在ServiceStack路由中定义,所有其他属性都可以由其他请求参数(如QueryString或请求正文)填充

你的路线有问题吗
  • 您还应该仅在路由末尾使用通配符映射,如
    {folders*}
    ,以避免歧义
  • 路由应与DTO上的确切属性名称相匹配,例如
    {ServiceName}
  • 为了实现最大的互操作性,您的请求DTO应该是平面的,并且没有任何复杂的类型属性通过没有标准的QueryString填充
  • 您的请求DTO已被使用,我们建议您不要尝试将其干燥或隐藏在继承之后
  • 对于用于服务实现类的请求DTO,不要使用
    服务
    名称

我正在尝试与现有API兼容,因此移动{Folders*}不是一个选项。但是技巧3和技巧4一起表明,没有继承的平面模型是最佳实践,路径信息和查询字符串都直接映射到模型上的属性。这是正确的理解吗?@CoreyAlix是的,最好是这样