現在のHttpContextにアクセスして、ASP.NET Core 2内のカスタムポリシーベースの承認のAuthorizationHandlerContext内のルートとパラメーターを確認するにはどうすればよいですか?
参照例: カスタムポリシーベースの承認
IHttpContextAccessor のインスタンスをAuthorizationHandler
に挿入する必要があります。
example のコンテキストでは、これは次のようになります。
public class BadgeEntryHandler : AuthorizationHandler<EnterBuildingRequirement>
{
IHttpContextAccessor _httpContextAccessor = null;
public BadgeEntryHandler(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
protected override Task HandleRequirementAsync(
AuthorizationContext context,
EnterBuildingRequirement requirement)
{
HttpContext httpContext = _httpContextAccessor.HttpContext; // Access context here
if (context.User.HasClaim(c => c.Type == ClaimTypes.BadgeId &&
c.Issuer == "http://microsoftsecurity"))
{
context.Succeed(requirement);
return Task.FromResult(0);
}
}
}
次のように、DIセットアップでこれを登録する必要がある場合があります(依存関係の1つがまだない場合)。
services.AddHttpContextAccessor();
IHttpContextAccessor
をAuthorizationHandler
sコンストラクターに注入できます。
例えば.
public class MyAuthorizationHandler : AuthorizationHandler<MyRequirement>
{
private IHttpContextAccessor _contextAccessor;
public MyAuthorizationHandler (IHttpContextAccessor contextAccessor)
{
_contextAccessor = contextAccessor;
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context,
MinimumPermissionLevelRequirement requirement) {
var httpContext = _contextAccessor.HttpContext;
// do things
}
}
注射せずに、簡単な解決策!
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement)
{
var authFilterCtx = (Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext)context.Resource;
var httpContext = authFilterCtx.HttpContext;
}