首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >外部部件中WebAPI控制器的ApiExplorer

外部部件中WebAPI控制器的ApiExplorer
EN

Stack Overflow用户
提问于 2015-09-08 16:05:44
回答 1查看 1.6K关注 0票数 0

我的WebApi控制器位于程序集中(自托管的OWIN应用程序或ASP应用程序)。是否可以从另一个应用程序(动态加载带有WebApi控制器的程序集)中使用ApiExplorer来生成WebApi文档?

EN

回答 1

Stack Overflow用户

发布于 2016-07-07 14:33:54

ApiExplorer使用GlobalConfiguration来确定可用的ApiControllers。指定外部程序集时,通常通过替换WebApi正在使用的IAssemblyResolver来执行此操作。这可以在Application_Start中完成,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        UnityConfig.RegisterComponents();

        GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver), new AssemblyResolver());

        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    }

下面是AssemblyResolver的实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class AssemblyResolver : System.Web.Http.Dispatcher.DefaultAssembliesResolver
    {
        public override ICollection<Assembly> GetAssemblies()
        {
            ICollection<Assembly> baseAssemblies = base.GetAssemblies();
            List<Assembly> assemblies = new List<Assembly>(baseAssemblies);

            var externalAssembly = typeof(MyApp.External).Assembly;
            assemblies.Add(externalAssembly);

            return baseAssemblies;
        }
    }

有人可能认为这足以让ApiExplorer拿起它,但事实并非如此。当ApiExplorer启动时,GlobalConfiguration被传递给HelpController。如果仔细查看GlobalConfiguration实例,就会发现Application_Start中受影响的更改并不存在。因此,要让ApiExplorer获取您的外部类,您可以像这样更新IAssemblyResolver:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public HelpController(HttpConfiguration config)
    {
        GlobalConfiguration.Configuration.Services.Replace(typeof(IAssembliesResolver), new AssemblyResolver());

        Configuration = config;
    }

可能有一种更干净的方法可以做到这一点,这样你就不会弄干了--但还没有找到它。当我找到这篇文章时,我会更新它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32462455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文