Как перенаправить из ActionFilter на другое действие или маршрут в Asp.net Core 2.2? - PullRequest
0 голосов
/ 16 марта 2019

как я могу перенаправить из ActionFilter на другой контроллер / действие в Asp.net Core 2.2

context.ExceptionHandled; // не отображается

У меня есть все варианты в этой теме. Как заставить фильтр перенаправить на другое действие?

Перенаправление на указанный контроллер и действие в asp.net mvc filter filter

Перенаправление из фильтра исключений

спасибо за вашу помощь

это мой код

public class ValidaEmpresaActionFilter : IActionFilter
{
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly IHttpContextAccessor _contextAccessor;

    public ValidaEmpresaActionFilter(UserManager<ApplicationUser> userManager, IHttpContextAccessor contextAccessor)
    {
        _userManager = userManager;
        _contextAccessor = contextAccessor; 
    }

    public async void OnActionExecuting(ActionExecutingContext context)
    {
        string username = _contextAccessor.HttpContext.User.Identity.Name;
        var user = await  _userManager.FindByNameAsync(username);

        // all options i tried Option 1
        if (user.EmpresaPrincipal == null || user.EmpresaPrincipal < 1)
        {

            RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
            redirectTargetDictionary.Add("action", "Index");
            redirectTargetDictionary.Add("controller", "Home");

            context.Result = new RedirectToRouteResult(redirectTargetDictionary);
        }
        // option #2
        if (user.EmpresaPrincipal == null || user.EmpresaPrincipal < 1)
            context.Result = new RedirectResult("~/Home/index");

        // option #3
        if (user.EmpresaPrincipal == null || user.EmpresaPrincipal < 1)
        {


            context.Result = new RedirectToRouteResult(
            new RouteValueDictionary
            {
                { "controller", "Home" },
                { "action", "Index" }
            });
        }

    }

    public void OnActionExecuted(ActionExecutedContext context)
    {

    }
}

в Startup / ConfigureServices

        services.AddScoped<ValidaEmpresaActionFilter>();

Я нашел ответ == Обновлено **

только что добавил эту строку await context.Result.ExecuteResultAsync(context);

это код результата:

    public async void OnActionExecuting(ActionExecutingContext context)
    {
        string username = _contextAccessor.HttpContext.User.Identity.Name;
        var user = await  _userManager.FindByNameAsync(username);

        if (user.EmpresaPrincipal == null || user.EmpresaPrincipal < 1)
        {
            RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
            redirectTargetDictionary.Add("action", "Index");
            redirectTargetDictionary.Add("controller", "Home");
            redirectTargetDictionary.Add("area", "");

            context.Result = new RedirectToRouteResult(redirectTargetDictionary);
            await context.Result.ExecuteResultAsync(context);
        }             
    }

спасибо всем друзьям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...