MVC角色重定向中C#插入查询参数

问题描述

我最近在MVC应用程序中实现了Roles。控制器具有多种操作方法,如下所示:

public class MyController : Controller

   [Authorize(Roles = "User,SuperUser")]
   public ActionResult DoActionOne() {
        // This can be invoked by both user and superuser
   }

   [Authorize(Roles = "SuperUser")]
   public ActionResult DoActionTwo() {
         // This can't be invoked by user
         // Application will redirect to /Login automatically when 'User' invokes it
   }
}

现在,这可以按需工作。

但是,我希望由于角色不足以在控制器中访问操作方法User时将/Login重定向DoActionTwo时,我想插入一个查询参数,该参数可以读取/Login页上的“向用户显示消息”,例如“无效的权限/需要授权”。它可能是任何自定义消息。

有什么想法吗?

解决方法

@SimpleGuy-使用“ OnAuthorizationAsync”方法检查以下代码。

您可以在不必要的请求下管理所有标志

"neptune."

这是您要更改的主要代码

public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        // Allow Anonymous skips all authorization
        if (context.Filters.Any(item => item is IAllowAnonymousFilter))
        {
            return;
        }

        var policyEvaluator = context.HttpContext.RequestServices.GetRequiredService<IPolicyEvaluator>();
        var authenticateResult = await policyEvaluator.AuthenticateAsync(Policy,context.HttpContext);
        var authorizeResult = await policyEvaluator.AuthorizeAsync(Policy,authenticateResult,context.HttpContext,context);

        if (authorizeResult.Challenged)
        {
            // Return custom 401 result
            context.Result = new CustomUnauthorizedResult("Authorization failed.");
        }
        else if (authorizeResult.Forbidden)
        {
            // Return default 403 result
            context.Result = new ForbidResult(Policy.AuthenticationSchemes.ToArray());
        }
    }

我希望这对您有帮助。