Authentication 依赖项注入的Web API 2 OWIN承载令牌身份验证不起作用

Authentication 依赖项注入的Web API 2 OWIN承载令牌身份验证不起作用,authentication,dependency-injection,unity-container,asp.net-web-api2,Authentication,Dependency Injection,Unity Container,Asp.net Web Api2,我需要创建一个带有基于令牌的身份验证的Web API 2项目,并在所有控制器中实现依赖项注入,包括defaultAccountController 遵循这些步骤 使用Visual Studio 2013 创建新的ASP.Net Web应用程序(Framework 4.5) 选择Web API 身份验证设置为个人用户帐户 我参考了我的服务和合同类DLL和软件包 PM>安装软件包Unity PM>安装程序包Unity.WebApi 更改的Unity.config public static vo

我需要创建一个带有基于令牌的身份验证的Web API 2项目,并在所有控制器中实现依赖项注入,包括default
AccountController

遵循这些步骤

  • 使用Visual Studio 2013
  • 创建新的ASP.Net Web应用程序(Framework 4.5)
  • 选择Web API
  • 身份验证设置为个人用户帐户
我参考了我的服务和合同类DLL和软件包

PM>安装软件包Unity

PM>安装程序包Unity.WebApi

更改的
Unity.config

public static void RegisterComponents()
{
    var container = new UnityContainer();

        // register all your components with the container here
        // it is NOT necessary to register your controllers

        // e.g. container.RegisterType<ITestService, TestService>();
        var section = LoadUnityConfigurationFile();
        section.Configure(container, "parent");
        ////section.Containers.Default.Configure(container);
        container.RegisterInstance(typeof(IUnityContainer), container);

        GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
    }



private static UnityConfigurationSection LoadUnityConfigurationFile()
    {
        var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
        return section;
    }
我添加了一个控制器
UserController
,用于获取用户详细信息。那很好

public class UserController : ApiController
        {

            public UserController(IUnityContainer container)
            {
                this.UnityContainer = container;
            }
            public IUnityContainer UnityContainer { get; set; }

            [HttpGet]
            [Route("Get")]
            public ServiceResponseDto<UserDto> GetUserDetails()
            {
                var userServices = this.UnityContainer.Resolve<IUserServices>();
                return userServices.GetUserDetails();
            }
    }
protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        //UnityConfig.RegisterComponents();  
        GlobalConfiguration.Configure(WebApiConfig.Register);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
如何在
AccountController
中添加依赖项注入

 namespace AUB.API.Controllers
    {
        [Authorize]
        [RoutePrefix("api/Account")]
        public class AccountController : ApiController
        {
            private const string LocalLoginProvider = "Local";
            private ApplicationUserManager _userManager;

            public AccountController()
            {
            }

            public AccountController(ApplicationUserManager userManager,
            ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
            {
                UserManager = userManager;
                AccessTokenFormat = accessTokenFormat;
            }

            public ApplicationUserManager UserManager
            {
                get
                {
                return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
                }
                private set
                {
                _userManager = value;
                }
            }

            public ISecureDataFormat<AuthenticationTicket> AccessTokenFormat { get; private set; }

            // GET api/Account/UserInfo
            [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
            [Route("UserInfo")]
            public UserInfoViewModel GetUserInfo()
            {
                ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

                return new UserInfoViewModel
                {
                    Email = User.Identity.GetUserName(),
                    HasRegistered = externalLogin == null,
                    LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
                };
            }
        }
    }
名称空间AUB.API.Controllers
{
[授权]
[RoutePrefix(“api/账户”)]
公共类AccountController:ApicController
{
私有常量字符串LocalLoginProvider=“Local”;
私有应用程序用户管理器\u用户管理器;
公共账户控制员()
{
}
公共帐户控制器(ApplicationUserManager用户管理器,
ISecureDataFormat访问令牌格式)
{
UserManager=UserManager;
AccessTokenFormat=AccessTokenFormat;
}
公共应用程序管理员用户管理器
{
得到
{
返回_userManager??Request.GetOwinContext().GetUserManager();
}
专用设备
{
_userManager=value;
}
}
公共ISecureDataFormat AccessTokenFormat{get;private set;}
//获取api/帐户/用户信息
[主机身份验证(DefaultAuthenticationTypes.ExternalBearer)]
[路线(“用户信息”)]
public UserInfoViewModel GetUserInfo()
{
ExternalLoginData externalLogin=ExternalLoginData.FromIdentity(User.Identity作为索赔实体);
返回新的UserInfoViewModel
{
Email=User.Identity.GetUserName(),
HasRegistered=externalLogin==null,
LoginProvider=externalLogin!=null?externalLogin.LoginProvider:null
};
}
}
}

我需要
AccountController
中所有与帐户相关的功能,包括依赖项注入。请帮忙

哇,这几天有很多的
NotWorkingException
。我为你感到难过。(你应该描述实际问题,而不是说“不工作”)。对不起,这还不是一个解释。什么是不工作的,如何工作?我当时打电话,调试可能和代码工作良好。然后调用(或任何url)调试器未到达AccountController。我得到了错误500。
 namespace AUB.API.Controllers
    {
        [Authorize]
        [RoutePrefix("api/Account")]
        public class AccountController : ApiController
        {
            private const string LocalLoginProvider = "Local";
            private ApplicationUserManager _userManager;

            public AccountController()
            {
            }

            public AccountController(ApplicationUserManager userManager,
            ISecureDataFormat<AuthenticationTicket> accessTokenFormat)
            {
                UserManager = userManager;
                AccessTokenFormat = accessTokenFormat;
            }

            public ApplicationUserManager UserManager
            {
                get
                {
                return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
                }
                private set
                {
                _userManager = value;
                }
            }

            public ISecureDataFormat<AuthenticationTicket> AccessTokenFormat { get; private set; }

            // GET api/Account/UserInfo
            [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
            [Route("UserInfo")]
            public UserInfoViewModel GetUserInfo()
            {
                ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

                return new UserInfoViewModel
                {
                    Email = User.Identity.GetUserName(),
                    HasRegistered = externalLogin == null,
                    LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
                };
            }
        }
    }