Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在MVC角色重定向中插入查询参数不足_C#_Asp.net Mvc_Asp.net Roles - Fatal编程技术网

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

C#在MVC角色重定向中插入查询参数不足,c#,asp.net-mvc,asp.net-roles,C#,Asp.net Mvc,Asp.net Roles,我最近在MVC应用程序中实现了角色。控制器有如下各种动作方式: public class MyController : Controller [Authorize(Roles = "User, SuperUser")] public ActionResult DoActionOne() { // This can be invoked by both user and superuser } [Authorize(Roles = &

我最近在MVC应用程序中实现了角色。控制器有如下各种动作方式:

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
   }
}
现在,这很好,正如所希望的那样

但是,我希望当
用户
被重定向到
/Login
时,由于没有足够的角色来访问控制器中的操作方法
DoActionTwo
,我希望插入一个查询参数,该参数可以被
/Login
页面读取,以便向用户显示类似“需要无效权限/授权”的消息。它可以是任何自定义消息


有什么想法吗?

@SimpleGuy-用“OnAuthorizationAsync”方法检查下面的代码

您可以使用不必要的请求管理所有标志

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());
        }
    }
这是您要更改的主要代码

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());
        }

我希望这对您有所帮助。

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

您可以使用不必要的请求管理所有标志

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());
        }
    }
这是您要更改的主要代码

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());
        }

我希望这对您有所帮助。

您需要使用授权权限自定义邮件吗?您需要使用授权权限自定义邮件吗?