Asp.net web api Ninject OWIN扩展中断Web API的CreatePerOwinContext
在尝试将Ninject用于使用ASP.NET标识的新Web API 2项目时,我遇到了一些奇怪的行为。我无法将回调传递到CreatePerOwinContext()以激发对Web API控制器的请求。对于MVC控制器,它们工作良好 重新创建的步骤:Asp.net web api Ninject OWIN扩展中断Web API的CreatePerOwinContext,asp.net-web-api,ninject,owin,asp.net-identity-2,Asp.net Web Api,Ninject,Owin,Asp.net Identity 2,在尝试将Ninject用于使用ASP.NET标识的新Web API 2项目时,我遇到了一些奇怪的行为。我无法将回调传递到CreatePerOwinContext()以激发对Web API控制器的请求。对于MVC控制器,它们工作良好 重新创建的步骤: 文件->新建VS 2013 ASP.NET Web应用程序 检查MVC和WebAPI 在“身份验证”下选择“个人” 为Ninject、Ninject.Web.Common.OwinHost、Ninject.Web.WebApi.OwinHost和相关
非常感谢任何人的想法。我最终通过使用Ninject进行全生命周期管理来解决这个问题。显然,CreatePerOwinContext()是一个在使用成熟的DI工具时不需要的工具 我看到的唯一需要注意的是,对于基于cookie的身份验证,ASP.NET Identity将在OwinContext中查找其UserManager。我使用的是基于令牌的身份验证,但我看到一些人开始在文本中填充用户管理器 我的Ninject绑定:
private static readonly Lazy _lazyKernel=new Lazy(CreateKernel);
//通过此属性访问singleton内核
公共静态IKernel内核{get{return}lazyKernel.Value;}
专用void配置对象(IAppBuilder应用程序)
{
app.usenject中间件(()=>内核);
Kernel.Bind().ToConstant(应用程序);
}
私有静态无效注册服务(IKernel内核)
{
kernel.Bind().ToSelf().InRequestScope().WithConstructorArgument(“connectionString”、“MyConnectionString”);
kernel.Bind().To().InRequestScope();
kernel.Bind().To().InRequestScope();
kernel.Bind().ToSelf().InRequestScope();
kernel.Bind().To();
kernel.Bind().To();
kernel.Bind().ToMethod(x=>x.kernel.Get().GetDataProtectionProvider().Create(“ASP.NET标识”);
kernel.Bind().To();
}