首页 > 解决方案 > 自定义 AuthorizationHandler 中的 ASP.NET Core 3.1 MVC 重定向

问题描述

在 ASP.NET Core 2 MVC 应用程序中,我有一个自定义AuthorizationHandler功能,可以将被阻止的用户重定向回主页。

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsAllowedIpAddressRequirement requirement)
{
    // Cast the context resource
    if (context.Resource is AuthorizationFilterContext cxt)
    {
            // Failed!
            cxt.Result = new RedirectToActionResult("Index", "Home", new { msg = "Your auth has failed." });
            context.Succeed(requirement);
    }
    ...
}

由于迁移到 ASP.NET Core 3.1,上下文是 class 的对象Microsoft.AspNetCore.Routing.RouteEndpoint,它没有Result属性。

如何将用户重定向到特定页面?

标签: .net-core-3.1asp.net-authorization

解决方案


我遇到了同样的问题,为了解决它,我改为过滤器(IAsyncResourceFilter)而不是策略。

您可以将授权逻辑包装到策略中,然后调用 IAuthorizationService 并随时随地重定向。

例子:

public class MySampleActionFilter: IActionFilter
{
   public void OnActionExecuting(ActionExecutingContext context)
   {
       //if failed
       context.Result = new RedirectToRouteResult(new RouteValueDictonary(new
       {
           controller = "Your Controller",
           action = "Your Action"
       }));
   }
}

顺便说一句,这是针对 .net Core 3 及更高版本的

文档


推荐阅读