C#在MVC角色重定向中插入查询参数不足
我最近在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 = &
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());
}
我希望这对您有所帮助。您需要使用授权权限自定义邮件吗?您需要使用授权权限自定义邮件吗?