Authentication 依赖项注入的Web API 2 OWIN承载令牌身份验证不起作用
我需要创建一个带有基于令牌的身份验证的Web API 2项目,并在所有控制器中实现依赖项注入,包括defaultAuthentication 依赖项注入的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
AccountController
遵循这些步骤
- 使用Visual Studio 2013
- 创建新的ASP.Net Web应用程序(Framework 4.5)
- 选择Web API
- 身份验证设置为个人用户帐户
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
};
}
}
}