有没有办法在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]
成为可选项。
答案 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)
{
...
}
}