Рассмотрим следующий код:
[Authenticate(Order = 1)]
public ActionResult SomeActionThatRequiresAuthentication()
{
var model = new SomeViewModel();
// Do something with an authenticated session/user...
return View(model);
}
Имеется ли атрибут Authenticate
до или после выполнения кода внутри метода SomeActionThatRequiresAuthentication
?
Я спрашиваю об этом, потому что у меня есть Атрибут, который делает что-то вроде этого:
public class Authenticate : CustomAuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!UserService.IsAuthenticated && !HttpContext.Current.Response.IsRequestBeingRedirected)
HttpContext.Current.Response.Redirect(ViewUtil.Actions.User.LogOnUrl());
}
}
Как видите, атрибут будет перенаправлять пользователя, если пользователь не аутентифицирован. Однако представляется, что перенаправление происходит только после выполнения действия. Это вызывает проблемы, потому что я сделал предположение, что пользователь аутентифицируется при выполнении действия. Сначала я должен понять, должны ли атрибуты произойти до или после выполнения действия, или я считаю, что рабочий процесс совершенно неверный?
Спасибо, Пол
После более подробного изучения становится ясно, что filterContext.Result
должен быть установлен, чтобы это работало. После внесения небольшого изменения в мой атрибут Authorize он теперь работает:
public class Authenticate : CustomAuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!UserService.IsAuthenticated && !HttpContext.Current.Response.IsRequestBeingRedirected)
filterContext.Result = new RedirectResult(ViewUtil.Actions.User.LogOnUrl());
}
}