我正在尝试遵循最佳实践并确保我的控制器倾向于在服务层中执行主要业务逻辑的位置。
在下面的操作中,我已将验证登录代码提取到服务层,但不确定处理 HttpConext.GetOwinContext.Authentication 并创建声明身份的逻辑应该去哪里?
这个控制器操作中的代码似乎太多了,还是可以保留在这里?它应该留在控制器中还是被提取到自己的服务基础设施或某种静态类中?
我对这将在哪里或它持有什么感到有点困惑。
我正在尝试遵循洋葱架构http://jeffreypalermo.com/blog/the-onion-architecture-part-1/
public ActionResult Index(LoginViewModel model, string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
if (ModelState.IsValid)
{
if (_service.ValidateLogin(model.CustomerCode, model.Username, model.Password))
{
var user = _service.GetUserByUsername(model.Username);
var identity = new ClaimsIdentity(new[] {
new Claim(ClaimTypes.NameIdentifier, model.Username),
new Claim(ClaimTypes.Name, user.Name)
}, DefaultAuthenticationTypes.ApplicationCookie, ClaimTypes.Name, ClaimTypes.Role);
HttpContext.GetOwinContext().Authentication.SignIn(new AuthenticationProperties
{
IsPersistent = true
}, identity);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError(string.Empty, "Invalid Client Code, Username or Password");
}
}
return View(model);
}