Asp.net mvc 5 如何重定向到OnActionExecuting中另一个区域的操作方法

Asp.net mvc 5 如何重定向到OnActionExecuting中另一个区域的操作方法,asp.net-mvc-5,asp.net-mvc-routing,Asp.net Mvc 5,Asp.net Mvc Routing,在我的MVC5应用程序中,我有3个方面。我的项目结构如下 我已经实现了一个ActionFilter类来验证用户是否已授予特定操作方法的权限。我的ActionFilter类不在区域文件夹内。我想检查OnActionExecuting方法中的用户权限,并重定向到PermissionDenied操作方法,该方法已在ErrorControl上实现。但是,它无法识别区域内,并给出一条错误消息,其中提到“区域内未找到控制器和操作方法” 谁能帮我解决这个问题。这件事已经毁了我的一天 区域不是路线值。它被放入

在我的MVC5应用程序中,我有3个方面。我的项目结构如下

我已经实现了一个ActionFilter类来验证用户是否已授予特定操作方法的权限。我的ActionFilter类不在区域文件夹内。我想检查OnActionExecuting方法中的用户权限,并重定向到PermissionDenied操作方法,该方法已在ErrorControl上实现。但是,它无法识别区域内,并给出一条错误消息,其中提到“区域内未找到控制器和操作方法”


谁能帮我解决这个问题。这件事已经毁了我的一天

区域不是路线值。它被放入
RouteData.DataTokens
字典中。但是无法从
重定向到路由结果设置它

相反,您可以像在
ActionLink
中一样,使用
UrlHelper
生成URL。
UrlHelper
将计算出
区域的虚拟路径。然后,您可以使用
RedirectResult
访问该URL

if (!GrantPermission(filterContext))
{
    Controller contr = (BaseController)filterContext.Controller;

    var urlHelper = new UrlHelper(filterContext.RequestContext);
    var redirectUrl = urlHelper.Action("PermissionDenied", "Error", new { area = "" });
    filterContext.Result = new RedirectResult(redirectUrl);
    filterContext.Result.ExecuteResult(contr.ControllerContext);
}

base.OnActionExecuting(filterContext);
注意:授权操作的正确方法是使用inherit或更好的方法。授权筛选器在操作筛选器之前运行。此外,它们将自动为您执行结果处理程序


面积不是路线值。它被放入
RouteData.DataTokens
字典中。但是无法从
重定向到路由结果设置它

相反,您可以像在
ActionLink
中一样,使用
UrlHelper
生成URL。
UrlHelper
将计算出
区域的虚拟路径。然后,您可以使用
RedirectResult
访问该URL

if (!GrantPermission(filterContext))
{
    Controller contr = (BaseController)filterContext.Controller;

    var urlHelper = new UrlHelper(filterContext.RequestContext);
    var redirectUrl = urlHelper.Action("PermissionDenied", "Error", new { area = "" });
    filterContext.Result = new RedirectResult(redirectUrl);
    filterContext.Result.ExecuteResult(contr.ControllerContext);
}

base.OnActionExecuting(filterContext);
注意:授权操作的正确方法是使用inherit或更好的方法。授权筛选器在操作筛选器之前运行。此外,它们将自动为您执行结果处理程序


谢谢你的快速回复和建议,这对我真的很有帮助。我尝试了这段代码,但它总是为redirectUrl var redirectUrl=urlHelper.Action(“PermissionDenied”,“Error”,new{area=”“})设置null;谢谢你的快速回复和建议,这对我真的很有帮助。我尝试了这段代码,但它总是为redirectUrl var redirectUrl=urlHelper.Action(“PermissionDenied”,“Error”,new{area=”“})设置null;