I tried as below for Policy based Authorization:
inject IEnumerable<EndpointDataSource>
into controller(or your target Service)
codes:
var endpoints = _endpointSources.SelectMany(es => es.Endpoints).OfType<RouteEndpoint>();
// a dictionary records all endpoints require authorization
var targetdic = new Dictionary<string, string>();
foreach(var ep in endpoints)
{
//read endpoint's controller name/action name from ControllerActionDescriptor
var descriptor = ep.Metadata.OfType<ControllerActionDescriptor>().FirstOrDefault();
//read httpmethod from HttpMethodMetadata
var httpmethod=ep.Metadata.OfType<HttpMethodMetadata>().FirstOrDefault()?.HttpMethods.First()??"GET";
//read authdata
var authdatalist = ep.Metadata.GetOrderedMetadata<IAuthorizeData>();
foreach(var authdata in authdatalist)
{
//logical may not correct here,you may need to validate auth scheme?
if (authdata.Policy != null&& httpmethod==HttpMethod.Get.Method)
{
var path = String.Format("/{0}/{1}", descriptor?.ControllerName, descriptor?.ActionName);
targetdic.Add(path, authdata.Policy);
break;
}
}
}
Tried with project as below:

detailed controllers and actions:
HomeController:

AnotherController:

When I debug,result:

Now you could try follow this doc:
@if ((await AuthorizationService.AuthorizeAsync(User, dic["Key"])).Succeeded)
{
//your link here accroding to the Key
}
based on abdusco's answer ,and this case,Hopes help