C# .NET Core 3.0 RouteEndpoint-如何返回RedirectToActionResult?
使用.NET Core 3.0-它不支持AuthorizationFilterContext,当身份验证失败时,我需要将用户重定向到错误页面 AuthHandlerCode:-C# .NET Core 3.0 RouteEndpoint-如何返回RedirectToActionResult?,c#,httpcontext,asp.net-core-3.0,.net-core-3.0,asp.net-authorization,C#,Httpcontext,Asp.net Core 3.0,.net Core 3.0,Asp.net Authorization,使用.NET Core 3.0-它不支持AuthorizationFilterContext,当身份验证失败时,我需要将用户重定向到错误页面 AuthHandlerCode:- public class CheckADGroupHandler : AuthorizationHandler<CheckADGroupRequirement> { private readonly IHttpContextAccessor _httpContextAccessor; publi
public class CheckADGroupHandler : AuthorizationHandler<CheckADGroupRequirement>
{
private readonly IHttpContextAccessor _httpContextAccessor;
public CheckADGroupHandler(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor ?? throw new
ArgumentNullException(nameof(httpContextAccessor));
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,CheckADGroupRequirement requirement)
{
if (wi.IsAuthenticated)
{
context.Succeed(requirement);
}
else
{
var endPoint = (Endpoint)context.Resource;
var attributes = endPoint.Metadata.GetOrderedMetadata<Attribute>();
var action = endPoint.Metadata.GetMetadata<ControllerActionDescriptor>();
//Redirect user to Error page here.....<<<<
//below Code doesn't work in .NET Core 3.0
//var mvcContext = context.Resource as AuthorizationFilterContext;
//mvcContext.Result = new RedirectResult("/Shared/Error");
//context.Succeed(requirement);
}
return Task.CompletedTask;
}
公共类CheckADGroupHandler:AuthorizationHandler
{
专用只读IHttpContextAccessor\u httpContextAccessor;
公共CheckADGroupHandler(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor=httpContextAccessor??抛出新
ArgumentNullException(nameof(httpContextAccessor));
}
受保护的覆盖任务HandleRequirementAsync(授权HandlerContext上下文,CheckADGroupRequirement)
{
如果(wi.未验证)
{
成功(要求);
}
其他的
{
var endPoint=(endPoint)context.Resource;
var attributes=endPoint.Metadata.GetOrderedMetadata,但两者都没有显示如何在.NET Core 3.0中返回重定向结果
欢迎使用任何指针……如果您希望用户重定向到某个页面,如登录页面,如果用户没有访问权限,您可以按照以下步骤进行修复:
进入HandleRequirementAsync
方法
if (Condition())
{
context.Succeed(requirement);
}
else {
context.Fail();
}
如果用户有访问权限,则执行context.success(要求);
如果用户没有访问权限,则执行context.Fail();
进入startup.cs
=>ConfigureServices
方法
services.ConfigureApplicationCookie(options =>
{
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromHours(12);
options.LoginPath = "/Account/Login";
options.AccessDeniedPath = "/Account/AccessDenied";
options.SlidingExpiration = true;
});
在我们写的那行
options.LoginPath = "/Account/Login";
在检查访问的HandleRequirementAsync
方法失败、被重定向到控制器“主页”控制器和“登录”激活后,我们将预约用户
我希望我的回答有用。这在ASP.NET Core 3.0
中是不可能的。作为一个演练,我建议您应该使用ResourceFilter
,在其中可以调用AuthorizationService
,然后可以设置上下文。Result=new RedirectResult(…)
@itminus找不到如何执行此操作的示例…例如:实现IAsyncResourceFilter::OnResourceExecutionAsync(ResourceExecutionContext,ResourceExecutionDelegate next)
方法:var-HttpContext=context.HttpContext;var-authZ=HttpContext.RequestServices.GetRequiredService();var result=await authZ.AuthorizeAsync(HttpContext.User,您的资源,您的策略);if(!result.succeed){context.result=new RedirectToActionResult(…);}await next();}