Возможно redireccionar в действие внутри строителя Controller используя ASP.Net MVC?

У меня есть один Controller названный GlobalController , все Controllers они будут получать в наследство его, и Ваша цель состоит в том, чтобы санкционировать, если пользователь уже заверен, тогда, заявляя строитель GlobalController таким образом:

public class GlobalController : Controller
{
    IAuthenticationManager Authentication
    {
        get { return HttpContext.GetOwinContext().Authentication; }
    }

    public GlobalController()
    {
        if (!Authentication.User.Identity.IsAuthenticated)
        {
            return RedirectToAction("Index", "Login");
        }
    }
}

Возможно, что, если пользователь не заверен, я redireccione в LoginController?

Также как и - мой код посылает мне следующее сообщение ошибки:

Ошибка 2 Since 'Веб. Project. Controllers. GlobalController. GlobalController ()' returns void, в return keyword must not be followed by an object expression

Что логично, потому что не ожидается стоимость возврата, если я снимаю его return для того, чтобы инструкция осталась, таким образом, RedirectToAction("Index", "Login"); он как будто он не реализовывал никакого действия, не производит ошибку и выполнение кода продолжает.

Заметь: Использовал MVC 5 и Овин Аутентикатион

3
задан 20.01.2017, 18:10
0 ответов

Решение состоит в создании одного FilterAttribute, таким образом, возможно санкционировать, если пользователь заверен в сайте, и в случае, если он не инициализировал сеанс он реализует перенаправление в Login:

Код FilterAttribute:

public class ValidateAuthenticationFilterAttribute : ActionFilterAttribute
{
    IAuthenticationManager Authentication
    {
        get { return System.Web.HttpContext.Current.GetOwinContext().Authentication; }
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!Authentication.User.Identity.IsAuthenticated)
        {
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Login", action = "Index" }));
        }
        base.OnActionExecuting(filterContext);
    }
}

Код Controller:

[ValidateAuthenticationFilter]
public class GlobalController : Controller
{
    //To Do
}

Так, все Controllers который они получили в наследство GlobalController они произойдут из-за ValidateAuthenticationFilterAttribute чтобы санкционировать сеанс.

6
ответ дан 03.12.2019, 17:36

Доказательство используя это:

[Authorize]
public class GlobalController : Controller
{

}

Признак Authorize проверь, заверил ли ты себя в сайт, если тебя это не сделал тебя redirecciona в страницу Login.

1
ответ дан 03.12.2019, 17:36
  • 1
    Probé добавляя признак [Autorize] и функционируй ( thumbs up +10), однако, как я требую реализовывать различные утверждения именно поэтому opté из-за solució n má s настроенная. Publiqué ответ того, что действительно requerí в. –  20.01.2017, 20:29

Теги

Похожие вопросы