【问题标题】:Web Api 2 + OWIN 3 + NInject.Web.WebApi.OwinHost, error at startup onlyWeb Api 2 + OWIN 3 + NInject.Web.WebApi.OwinHost,仅在启动时出错
【发布时间】:2015-04-18 16:17:21
【问题描述】:

我正在为我的 DI 使用 Web API2、Owin 3 和 NInject Owinhost 构建一个 REST API。

使用 NInject 提供的示例,我创建了一个“HttpConfiguration”对象并在 startup.cs 中调用 NInject 扩展方法,但出现错误:

激活 HttpConfiguration 时出错 有多个匹配的绑定可用。 匹配绑定: 1) 从 HttpConfiguration 绑定到方法 2)HttpConfiguration的自绑定 3) 从 HttpConfiguration 绑定到常量值 激活路径: 1) 请求HttpConfiguration

建议: 1) 确保您只为 HttpConfiguration 定义了一次绑定。

我的代码在 Startup.cs 中如下:

 public void Configuration(IAppBuilder app)
    {
        Logger.Info("Entering Startup");

        config = new HttpConfiguration();

        ConfigureOAuth(app);

        // Web API configuration and services
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter("Bearer"));

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new {id = RouteParameter.Optional}
            );

        var appXmlType =
            config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(
                t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

        app.UseNinjectMiddleware(CreateKernel);

        app.UseNinjectWebApi(config);

        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

        Logger.Info("Exiting Startup");

    }


    public static StandardKernel CreateKernel()
    {
        kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());

        kernel.Bind<HttpConfiguration>().ToSelf().Named("TestHttpConfiguration");

        return kernel;
    }

奇怪的是,当我在浏览器中刷新页面时,错误出现了,这让我相信这只会在应用程序启动时发生。

所以我对此感到困惑。有没有人遇到过同样的问题?

谢谢

文森特

【问题讨论】:

  • 我刚开始在一个新项目中遇到这个问题。抛出此错误的中间件是:app.UseNinjectWebApi(config);当我评论说一切都按预期工作时。我仍在四处挖掘以弄清楚发生了什么。
  • 愚蠢的猜测,但是当您将 HttpConfiguration 绑定到 TestHttpConfiguration 时会发生什么?
  • 您好,感谢您回复我,遗憾的是我没有设法开始我的原始项目。请参阅下面的答案,我通过从头开始并使用控制台安装软件包对其进行了排序。和你一样,是 app.useNInjectWebApi 导致了错误,但无论我如何处理它,它在这个 httpconfiguration 上一直失败。不确定这会帮助你,我希望它会。告诉我。
  • 是的,我最终做了同样的事情。我不确定发生了什么,但从头开始对我也有效。
  • 很高兴您也对其进行了排序。

标签: rest asp.net-web-api ninject owin


【解决方案1】:

我遇到了同样的错误,因为某种原因我同时安装了Ninject.Web.WebApi.WebHostNinject.Web.WebApi.OwinHost

如果您在源代码中查找OwinWebApiModule.csWebApiWebHostModule.cs,则两个Ninject 模块都有HttpConfiguration 的绑定。

我删除了我不需要的那个并且一切正常。

【讨论】:

  • 您可能需要手动删除/bin 文件夹的内容。尽管我已经删除了 NuGet 和引用,但我的文件中有一个 Ninject.Web.WebApi.WebHost 的 DLL 文件。即使是 Clean and Rebuild 也没有删除它们。我手动删除了/bin 的所有内容,一切又开始工作了。
【解决方案2】:

更新

在尝试了一切之后,我设法通过...从头开始一个新项目。我有幸这样做,因为这对我来说是一个新的概念证明。

这里的主要区别是我使用包管理器控制台而不是 UI 安装了所需的包(owin 3,ninject)。我在这里按照link 安装了这些软件包。

然后我注意到其中一个包上出现错误消息,因为它正在寻找 Owin 2 依赖项但找不到任何依赖项。我强制它使用 -DependencyVersion Highest 作为参数进行安装,它从一开始就运行良好。

除非我错过了它,否则我在使用 UI 安装软件包时没有看到此错误。是否有可能该软件包以前没有在我的其他项目上正确安装?不确定。

希望这对某人有所帮助。

【讨论】:

  • 我发现问题出在这个 nuget 包“Ninject.Web.WebApi”使用版本 3.2.0.0 时存在错误。一旦我将该 nuget 包更新到版本 3.2.4.0,一切正常,无需任何额外更改。
  • 对我来说,在本地开发中一切正常,但一旦部署到 Azure 就无法正常工作。根据 sgmeyer 的解决方案,将 nuget 包更新到 3.2.4 版本即可解决问题。
  • 我没有从头开始创建一个新项目,而是清空了我的 bin 目录,删除了我的包文件夹并恢复了我的所有包
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 2015-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 2017-09-26
相关资源
最近更新 更多