как я могу перенаправить из 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);
}
}
спасибо всем друзьям