OWIN无法使用webapp.start隔离运行多个应用程序

时间:2014-01-02 14:00:17

标签: c# asp.net asp.net-web-api owin attributerouting

当我尝试在不同的网址上启动两个应用时,我遇到了属性路由中间件的问题。如果我在单独的应用程序中有两个类似的路由,但使用不同的http方法web.api似乎只找到其中​​一种方法。

Microsoft.Owin.Hosting.WebApp.Start<Admin.Startup>("http://localhost:1000");
Microsoft.Owin.Hosting.WebApp.Start<Startup>("http://localhost:1001");

如何隔离这两个应用,以便属性路由不冲突?

2 个答案:

答案 0 :(得分:3)

根据您的上一条评论,以下示例过滤掉程序集:

config.Services.Replace(typeof(IAssembliesResolver), new CustomAssembliesResolver());

public class CustomAssembliesResolver : DefaultAssembliesResolver
{
    public override ICollection<Assembly> GetAssemblies()
    {
        ICollection<Assembly> defaultProbedAssemblies = base.GetAssemblies();

        //TODO: filter out the assemblies that you do not want to be probed

        return defaultProbedAssemblies;
    }
}

答案 1 :(得分:0)

我有完全相同的问题,@ KiranChalla的回答让我走上了正确的道路(谢谢!)。问题确实在于装配扫描比我想要的要深。对我来说,我一直希望扫描只包括当前&#34;当前&#34;定义了Startup,因为这是所有相关控制器都存在的Web API项目。我创建了一个总是只返回一个程序集的解析器:

public class SingleAssemblyResolver : IAssembliesResolver
{
    private readonly Assembly _ass;

    public SingleAssemblyResolver(Assembly ass) {
        _ass = ass;
    }

    public ICollection<Assembly> GetAssemblies() {
        return new[] { _ass };
    }
}

在每个Startup注册时,告诉它哪个程序集(&#34;这个&#34;一个):

config.Services.Replace(typeof(IAssembliesResolver),
    new SingleAssemblyResolver(this.GetType().Assembly));