Saya memiliki proyek netcore 2.2 yang berfungsi di mana saya telah menerapkan kebijakan khusus yang memeriksa Kunci API.
Di startup.cs saya menambahkan kebijakan ini seperti ini
//Add Key Policy
services.AddAuthorization(options =>
{
options.AddPolicy("AppKey", policy => policy.Requirements.Add(new AppKeyRequirement()));
});
Di AppKeyRequirement saya, saya mewarisi dari AuthorizationHandler dan menyelesaikan kunci dalam permintaan yang masuk seperti ini
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
Ini tidak berfungsi di netcore 3.1
Saya mendapatkan kesalahan berikut:
Tidak dapat membuang objek bertipe 'Microsoft.AspNetCore.Routing.RouteEndpoint' untuk mengetik 'Microsoft.AspNetCore.Mvc.Filters.AuthorizationFilterContext'.
Apa cara yang benar untuk melakukan ini di inti 3 dan di atas?
Seperti yang ditunjukkan oleh Kirk Larkin, cara yang benar dalam .net 3.0 dan di atasnya adalah menyuntikkan IHttpContextAccessor ke dalam Auth handler dan menggunakannya.
Pertanyaan saya pada titik ini adalah bagaimana saya menyuntikkan ini? Saya tidak bisa meneruskan ini di startup.cs atau setidaknya saya tidak melihat caranya.
Setiap ide / petunjuk akan sangat dihargai.
sumber
IHttpContextAccessor
. Lihat dokumen .