如何解决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());
}
}
我希望这对您有帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。