2

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

<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>

此外,我们告诉 ServiceStack 应用程序它有一个通过AppHost.csapi中的端点主机配置的基本工厂路径

SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "api" });

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

有没有办法将全局参数添加到路径的路由?我们的想法是在配置中添加这个参数,/api/{Locale}然后我们所有的请求 DTO 都将从BaseRequest具有属性的类继承string Locale {get;set;}

作为额外的奖励,如果可以将其设为可选参数(可能通过web.config&中的两条路由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)
}

Prefix 值可以设置AppHost.cs/{Locale},这将自动将 Locale 参数注入所有路由,前提是我使用[PrefixedRoute]而不是[Route].

这种方法似乎有效,除了我没有看到一种方法可以{Locale}选择。

4

1 回答 1

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)
    {
        ...
    }
}
于 2014-04-17T13:50:21.067 回答