我正在尝试遵循最佳实践,并确保我的控制器倾向于在服务层中执行主要业务逻辑。
在下面的操作中,我已将Validate Login代码提取到服务层,但我不确定逻辑应该去哪里处理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);
}