将参数添加到ServiceStack的基本路径

时间:2013-10-17 17:18:34

标签: routing servicestack

有没有办法在ServiceStack中将路由参数添加到基本工厂路径? 目前,我们将IIS配置为通过 web.config 将任何以/api/开头的请求路由到ServiceStackHttpHandlerFactory

<location path="api">
  <system.web>
    <httpHandlers>
      <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
    </httpHandlers>
  </system.web>

  <!-- Required for IIS 7.0 -->
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
    </handlers>
  </system.webServer>

此外,我们通过 AppHost.cs

中的端点主机配置告诉ServiceStack应用程序它的基本工厂路径为api
SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "api" });

完成此操作后,我们会通过请求DTO上的[Route]属性指定我们服务的路由,而且我们不必担心'/ api'部分。

有没有办法在路径的路径中添加全局参数?我们的想法是在配置/api/{Locale}中添加此参数,然后我们的所有请求DTO都将从具有属性BaseRequest的{​​{1}}类继承。

作为一个额外的好处,如果有可能使这个可选参数(可能通过string Locale {get;set;}&amp; web.config中的两个路径),以允许此参数的'默认'值' d会更好。


修改

我目前正在探索创建一个扩展AppHost.cs类的类的想法。

RouteAttribute

可以在public class PrefixedRouteAttribute : RouteAttribute { public static string Prefix = string.Empty; public PrefixedRouteAttribute(string path) : base(Prefix + path) public PrefixedRouteAttribute(string path, string verbs) : base(Prefix + path, verbs) } AppHost.cs中设置前缀值,如果我使用/{Locale}而不是[PrefixedRoute],则会自动将Locale参数注入所有路由。< / p>

这种方法似乎有效,除了我没有办法让[Route]成为可选项。

1 个答案:

答案 0 :(得分:2)

这应该有效:

public abstract class BaseDto
{
    public string Locale { get; set; }

    public BaseDto()
    {
        Locale = "en";
    }
}

[Route("/{Locale*}/test")]
public class TestDto : BaseDto
{
    public int SomeParam { get; set; }
}

public class TestService : Service
{
    public Result Get(TestDto request)
    {
        ...
    }
}