1) Нет, атрибуты ActionFilter не являются хорошим подходом для аутентификации пользователя. (Так как нам нужно выполнить аутентификацию один раз и установить аутентификацию cookie, HttpContext.User будет оставаться аутентифицированным до истечения срока действия куки)
2) Да, настройка filtercontext.Result является идеальным способом предотвращения доступа, (Но вместо назначения HttpNotFoundResult, используйте RedirectResult для перенаправления на страницу входа)
3) Я действительно не понимаю, почему такая реализация для авторизации. Наилучшим подходом было бы иметь действие, которое получит отправленные данные формы (имя пользователя и пароль).и используйте атрибут Authorize для предотвращения несанкционированного доступа.
Ниже приведен код из примера приложения MVC3 по умолчанию в VS2010.
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}