Установка результата для IAuthorizationFilter - PullRequest
2 голосов
/ 21 сентября 2008

Я хочу установить результат действия из-за сбоя IAuthorizationFilter. Однако я не уверен, как создать ActionResult из фильтра. Контроллер не выглядит внутри фильтра, поэтому мой обычный вид («SomeView») не работает. Есть ли способ получить контроллер или другой способ создания результата действия, так как он не выглядит как экземпляр?

Не работает:

    [AttributeUsage(AttributeTargets.Method)]
    public sealed class RequiresAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter
    {
    public void OnAuthorization(AuthorizationContext context)
    {
        if (!context.HttpContext.User.Identity.IsAuthenticated)
        {
            context.Result = View("User/Login");
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 21 сентября 2008

Вы должны взглянуть на реализацию IAuthorizationFilter, которая поставляется с платформой MVC, AuthorizeAttribute. Если вы используете проверку подлинности с помощью форм, вам не нужно устанавливать результат на User / Login. Вы можете получить ответ о статусе HTTP 401, и ASP.NET перенаправит вас на страницу входа в систему.

Единственная проблема, связанная с установкой результата для user / login, заключается в том, что адресная строка пользователя не обновляется, поэтому они будут на странице входа, но URL-адрес не будет совпадать. Для некоторых людей это не проблема. Но некоторые люди хотят, чтобы URL их сайта соответствовал тому, что видит пользователь в своем браузере.

1 голос
/ 21 сентября 2008

Вы можете создать экземпляр соответствующего ActionResult напрямую, а затем установить его в контексте. Например:

public void OnAuthorization(AuthorizationContext context)
{
    if (!context.HttpContext.User.Identity.IsAuthenticated)
    {
        context.Result = new ViewResult { ViewName = "Whatever" };
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...