gpt4 book ai didi

asp.net-web-api - Ninject.ActivationException 仅在第一个 Web 请求时抛出(WebAPI 2、OWIN 3、Ninject 3)

转载 作者:行者123 更新时间:2023-12-02 20:25:23 35 4
gpt4 key购买 nike

我正在尝试创建一个“准系统”Web API 项目,该项目使用 OWIN 中间件、Ninject 依赖注入(inject),并最终托管在 IIS 中。我已按照文章“与 ASP.NET Web.API2、OWIN 和 Ninject 成为 friend ”中的说明进行操作,此处:http://www.alexzaitzev.pro/2014/11/webapi2-owin-and-ninject.html ,除了我使用了一个空的Web应用程序项目,并且在创建项目时没有勾选“包括Web API引用和文件夹”。

当我启动新 API 并发出页面请求时,我抛出以下 Ninject.ActivationException :

Server Error in '/' Application.

Error activating HttpConfiguration
More than one matching bindings are available.
Matching bindings:
1) binding from HttpConfiguration to method
2) binding from HttpConfiguration to constant value
Activation path:
1) Request for HttpConfiguration

Suggestions:
1) Ensure that you have defined a binding for HttpConfiguration only once.

当我刷新浏览器时,此异常消失。我真的不明白是什么导致了这个异常。从我的角度来看,由于对 OWIN 上下文中的 WebAPI 和 Ninject 缺乏经验,很难知道问题出在哪里。是和Ninject一起吗……?是在欧文吗...?是在 WebAPI 中吗?

这是我的 Startup.cs 文件的内容:

using System.Web.Http;
using LHD.API_2;
using Microsoft.Owin;
using Microsoft.Owin.Security.OAuth;
using Ninject.Web.Common.OwinHost;
using Ninject.Web.WebApi.OwinHost;
using Owin;

[assembly: OwinStartup(typeof(Startup))]

namespace LHD.API_2
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();

// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute("API Default", "api/1/{controller}/{action}/{id}", new { id = RouteParameter.Optional });

app.UseNinjectMiddleware(() => NinjectConfig.CreateKernel.Value);
app.UseNinjectWebApi(config);
}
}
}

这是我的 NinjectConfig.cs 文件的内容:

using System;
using System.Reflection;
using Ninject;

namespace LHD.API_2
{
public static class NinjectConfig
{
public static Lazy<IKernel> CreateKernel = new Lazy<IKernel>(() =>
{
StandardKernel kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());

RegisterServices(kernel);

return kernel;
});

private static void RegisterServices(KernelBase kernel)
{
// TODO - put in registrations here...

//kernel.Bind<IFakeService>().To<FakeService>();
}
}
}

这是我的packages.config的内容:

<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.WebApi" version="5.0.0" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.Owin" version="5.2.3" targetFramework="net451" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.0.0" targetFramework="net451" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net451" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net451" />
<package id="Newtonsoft.Json" version="6.0.4" targetFramework="net451" />
<package id="Ninject" version="3.2.0.0" targetFramework="net451" />
<package id="Ninject.Extensions.ContextPreservation" version="3.2.0.0" targetFramework="net451" />
<package id="Ninject.Extensions.NamedScope" version="3.2.0.0" targetFramework="net451" />
<package id="Ninject.Web.Common" version="3.2.0.0" targetFramework="net451" />
<package id="Ninject.Web.Common.OwinHost" version="3.2.3.0" targetFramework="net451" />
<package id="Ninject.Web.WebApi" version="3.2.0.0" targetFramework="net451" />
<package id="Ninject.Web.WebApi.OwinHost" version="3.2.4.0" targetFramework="net451" />
<package id="Owin" version="1.0" targetFramework="net451" />
</packages>

...而且,为了完整起见,我的 web.config 的内容同样不引人注目:

<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" />
</system.web>

<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http.Owin" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
</configuration>

任何人都可以指出我做错了什么,或者更重要的是,我可以改变什么以使事情正常运行而不抛出异常?

最佳答案

您使用的是哪个版本的Ninject.Web.WebApi库?看起来两周前进行了更改以移动一些内容。在此更改之前(v3.2.3 及更早版本),HttpConfiguration 绑定(bind)存在于 Ninject.Web.WebApi.OwinHost.OwinWebApiModuleNinject.Web 的 2 个不同模块中.WebApi.WebApiModule。进行此更改后(新版本为 3.2.4),此绑定(bind)仅发生一次。

关于asp.net-web-api - Ninject.ActivationException 仅在第一个 Web 请求时抛出(WebAPI 2、OWIN 3、Ninject 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28711963/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com