Asp.net web api Ninject OWIN扩展中断Web API的CreatePerOwinContext

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用于使用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和相关包添加nuget包
  • 按照以下步骤为启用Owin的应用程序配置ninject
  • 在ApplicationUserManager.Create()中放置断点,然后进行F5调试
  • 见证对家庭控制器工作正常的请求-断点被命中。向API控制器(比如API/Account/Register)发出fiddler请求,回调就永远不会被调用
  • 我不是ninject爱好者,所以我不确定这是我做错了什么,还是ninject OWIN扩展中的一个bug。我倾向于将OwinContext放在后面,只使用Ninject-perHttpRequest作用域,但我不确定ASP.NET标识系统是否会崩溃。我听说可能会有对OwinContext.Get()的内部调用,如果我不将内容保存在OWIN上下文中,该调用就会中断


    非常感谢任何人的想法。

    我最终通过使用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();
    }