5

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

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

如何隔离两个应用程序以使属性路由不冲突?

4

2 回答 2

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;
    }
}
于 2014-01-03T15:45:42.313 回答
1

我遇到了完全相同的问题,@KiranChalla 的回答让我走上了正确的道路(谢谢!)。问题确实在于装配扫描比我想要的更深。对我来说,我一直希望扫描只包括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

config.Services.Replace(typeof(IAssembliesResolver),
    new SingleAssemblyResolver(this.GetType().Assembly));
于 2015-03-04T20:04:06.197 回答