【发布时间】:2019-03-16 07:31:10
【问题描述】:
如何从 ActionFilter 重定向到 Asp.net Core 2.2 中的另一个控制器/动作
context.ExceptionHandled; //不显示
我已经尝试了这些线程上的所有选项:
这是我的代码
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)
{
}
}
在启动/配置服务中
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);
}
}
【问题讨论】:
-
感谢您的提问,然后您的回答
标签: asp.net-core