servicestack 如何查询特定路由的AppHost?,servicestack,servicestack" /> servicestack 如何查询特定路由的AppHost?,servicestack,servicestack" />

servicestack 如何查询特定路由的AppHost?

servicestack 如何查询特定路由的AppHost?,servicestack,servicestack,基本上我有以下架构: 网站项目(1) 域名项目(2) Api项目(3) 依赖项: 1使用2和3 3使用2 2什么都不用 在我的Api项目中,我定义了ServiceStack.Webhost.Endpoints.AppHostBase的具体实现,例如ApiAppHost: public sealed class ApiAppHost : AppHostBase { private ApiAppHost() : base("Description", typeof (

基本上我有以下架构:

  • 网站项目(1)
  • 域名项目(2)
  • Api项目(3)
依赖项:

  • 1使用2和3
  • 3使用2
  • 2什么都不用
在我的Api项目中,我定义了
ServiceStack.Webhost.Endpoints.AppHostBase
的具体实现,例如
ApiAppHost

public sealed class ApiAppHost : AppHostBase
{
    private ApiAppHost()
        : base("Description", typeof (ApiAppHost).Assembly) {}

    public override void Configure(Container container)
    {
        this.SetConfig(new EndpointHostConfig
        {
            ServiceStackHandlerFactoryPath = "api"
        });

        this.Routes.Add<Foo>("/foo", "POST");
    }

    public static void Initialize()
    {
        var instance = new ApiAppHost();
        instance.Init();
    }
}
公共密封类ApiAppHost:AppHostBase
{
私有ApiAppHost()
:base(“Description”,typeof(ApiAppHost).Assembly{}
公共覆盖无效配置(容器)
{
此.SetConfig(新的EndpointHostConfig
{
ServiceStackHandlerFactoryPath=“api”
});
这个.Routes.Add(“/foo”,“POST”);
}
公共静态void Initialize()
{
var instance=new ApiAppHost();
Init();
}
}
这很直截了当

现在我想从我的网站项目中查询我的
this.Routes
(与
EndpointHostConfig.ServiceStackHandlerFactoryPath
)以获得
Foo
的特定路径


我如何在不自己创建拦截器的情况下做到这一点?ServiceStack.Net是否提供了适合的服务?

目前我正在做类似的事情

public static class AppHostBaseExtensions
{
    public static string GetUrl<TRequest>(this AppHostBase appHostBase)
    {
        var requestType = typeof (TRequest);

        return appHostBase.GetUrl(requestType);
    }

    public static string GetUrl(this AppHostBase appHostBase, Type requestType)
    {
        var endpointHostConfig = appHostBase.Config;
        var serviceStackHandlerFactoryPath = endpointHostConfig.ServiceStackHandlerFactoryPath;

        var serviceRoutes = appHostBase.Routes as ServiceRoutes;
        if (serviceRoutes == null)
        {
            throw new NotSupportedException("Property Routes of AppHostBase is not of type ServiceStack.ServiceHost.ServiceRoutes");
        }
        var restPaths = serviceRoutes.RestPaths;
        var restPath = restPaths.FirstOrDefault(arg => arg.RequestType == requestType);
        if (restPath == null)
        {
            return null;
        }

        var path = restPath.Path;
        var virtualPath = "~/" + string.Concat(serviceStackHandlerFactoryPath, path); // bad, i know, but combining with 2 virtual paths ...
        var absolutePath = VirtualPathUtility.ToAbsolute(virtualPath);

        return absolutePath;
    }
}
公共静态类AppHostBaseExtensions
{
公共静态字符串GetUrl(此AppHostBase AppHostBase)
{
var requestType=typeof(TRequest);
返回appHostBase.GetUrl(requestType);
}
公共静态字符串GetUrl(此AppHostBase AppHostBase,类型requestType)
{
var endpointHostConfig=appHostBase.Config;
var serviceStackHandlerFactoryPath=endpointHostConfig.serviceStackHandlerFactoryPath;
var serviceRoutes=appHostBase.Routes作为serviceRoutes;
if(serviceRoutes==null)
{
抛出新的NotSupportedException(“AppHostBase的属性路由不是ServiceStack.ServiceHost.ServiceRoutes类型”);
}
var restPaths=serviceRoutes.restPaths;
var restPath=restPaths.FirstOrDefault(arg=>arg.RequestType==RequestType);
if(restPath==null)
{
返回null;
}
var path=restPath.path;
var virtualPath=“~/”+string.Concat(serviceStackHandlerFactoryPath,path);//我知道这不好,但与两个虚拟路径结合使用。。。
var absolutePath=virtualPath.ToAbsolute(virtualPath);
返回绝对路径;
}
}
我知道这是错误的,因为存在很多问题(路径组合、不考虑rest路径、不考虑带有占位符的rest路径),但它可以作为一个开始

编辑: 只有在
AppHostBase
-实现的
Configure(Container)
中注册路由时,这才有效。它不能与
RestServiceAttribute
-属性一起使用