ฉันมีโครงการ netcore 2.2 ที่ใช้งานได้ซึ่งฉันได้นำนโยบายที่กำหนดเองมาใช้เพื่อตรวจสอบคีย์ API
ใน startup.cs ฉันกำลังเพิ่มนโยบายนี้เช่นนี้
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
ใน AppKeyRequirement ฉันสืบทอดมาจาก AuthorizationHandler และแก้ไขคีย์ในคำขอที่เข้ามาเช่นนี้
protected override Task HandleRequirementAsync(AuthorizationHandlerContext authContext, AppKeyRequirement requirement)
{
var authorizationFilterContext = (AuthorizationFilterContext)authContext.Resource;
var query = authorizationFilterContext.HttpContext.Request.Query;
if (query.ContainsKey("key") && query.ContainsKey("app"))
{ // Do stuff
สิ่งนี้ไม่ทำงานใน netcore 3.1
ฉันได้รับข้อผิดพลาดต่อไปนี้:
ไม่สามารถโยนวัตถุประเภท 'Microsoft.AspNetCore.Routing.RouteEndpoint' เพื่อพิมพ์ 'Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext'
วิธีที่ถูกต้องในการทำเช่นนี้ใน core 3 ขึ้นไปคืออะไร?
ดังที่ Kirk Larkin ชี้ให้เห็นวิธีที่ถูกต้องใน. net 3.0 และสูงกว่าคือการฉีด IHttpContextAccessor เข้าไปในตัวจัดการ Auth และใช้สิ่งนั้น
คำถามของฉัน ณ จุดนี้ฉันจะฉีดนี้ได้อย่างไร ฉันไม่สามารถผ่านสิ่งนี้ใน startup.cs หรืออย่างน้อยฉันไม่เห็นว่า
ความคิด / คำแนะนำใด ๆ ที่จะได้รับการชื่นชมมาก