gpt4 book ai didi

c# - 如何从 AuthorizationHandler .NET Core 获取参数

转载 作者:可可西里 更新时间:2023-11-01 08:15:55 24 4
gpt4 key购买 nike

我正在使用授权处理程序将自定义授权放入我在 .net 核心中的 Controller 中。如何从 Controller 获取参数并将其用于授权处理程序?

在旧的 .NET 中,我可以像这样从 HttpContext 请求参数中获取参数:

var eventId = filterContext.RequestContext.HttpContext.Request.Params["id"];

我不确定如何在 .net core 中实现它

public class HasAdminRoleFromAnySiteRequirement : AuthorizationHandler<HasAdminRoleFromAnySiteRequirement>, IAuthorizationRequirement
{
public HasAdminRoleFromAnySiteRequirement()
{

}

protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
HasAdminRoleFromAnySiteRequirement requirement)
{

//need to call get param from controller to used in the validation
// something like this
//var eventId = filterContext.RequestContext.HttpContext.Request.Params["id"];
// I tried the suggestion below but I can't get the parameter from routedata
// var mvcContext = context.Resource as Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext;

return Task.FromResult(0);
}
}

最佳答案

在启用端点路由的 ASP.NET Core 3.0 中,您可以获得这样的路由参数值:

public class MyRequirementHandler : AuthorizationHandler<MyRequirement>
{
private readonly IHttpContextAccessor _httpContextAccessor;

public MyRequirementHandler(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor));
}

protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
{
var routeData = _httpContextAccessor.HttpContext.GetRouteData();

var areaName = routeData?.Values["area"]?.ToString();
var area = string.IsNullOrWhiteSpace(areaName) ? string.Empty : areaName;

var controllerName = routeData?.Values["controller"]?.ToString();
var controller = string.IsNullOrWhiteSpace(controllerName) ? string.Empty : controllerName;

var actionName = routeData?.Values["action"]?.ToString();
var action = string.IsNullOrWhiteSpace(actionName) ? string.Empty : actionName;

//...
}
}

关于c# - 如何从 AuthorizationHandler .NET Core 获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39589569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com