Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Při použití cookie ověřování vrací koncové body rozhraní API odpovídající stavové kódy HTTP (například 401 nebo 403) kvůli selhání ověřování místo přesměrování neověřených požadavků na přihlašovací stránky. Toto chování, které je vhodnější pro programový přístup k rozhraní API, bylo zavedeno v ASP.NET Core v .NET 10.
Jak ASP.NET Core identifikuje koncové body rozhraní API
ASP.NET Core toto chování automaticky použije na koncové body, které rozpozná jako související s rozhraním API, včetně:
- Kontrolery zdobené atributem
[ApiController] - Minimální koncové body rozhraní API zaregistrované v
MapGet: ,MapPostMapPut,MapDelete, atd. - Koncové body, které explicitně požadují odpovědi JSON
- SignalR rozbočovače a koncové body
Výchozí chování a přizpůsobení
Ve výchozím nastavení ASP.NET Core použije cookie logiku ověřování na základě typu koncového bodu:
- Webové stránky: Přesměrování na přihlašovací stránky
- Koncové body rozhraní API: Vrátí stavové kódy 401 nebo 403 bez přesměrování.
Konfigurace chování
I když výchozí chování funguje ve většině scénářů, můžete ho v případě potřeby přizpůsobit:
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/Account/Login";
// The framework automatically handles API endpoints
// No additional configuration needed
});
Pokud potřebujete přepsat automatické zjišťování konkrétních koncových bodů, použijte [Authorize] atribut s konkrétními schématy ověřování nebo implementujte vlastní obslužné rutiny ověřování.
Úvahy o migraci
Tato změna chování zavedená v .NET 10 je navržená tak, aby byla pro stávající aplikace nefunkční:
- Webové aplikace: Pokračovat v práci jako předtím s přesměrováním přihlašovací stránky
- Smíšené aplikace: Koncové body rozhraní API získají správné stavové kódy, zatímco webové stránky získávají přesměrování.
- Aplikace jen pro rozhraní API: Výhody správných stavových kódů HTTP bez další konfigurace
Testování koncových bodů rozhraní API
Po upgradu na ASP.NET Core 10 ověřte, že koncové body rozhraní API vrací odpovídající stavové kódy:
[Test]
public async Task UnauthorizedApiRequest_Returns401()
{
var response = await client.GetAsync("/api/secure-data");
Assert.Equal(HttpStatusCode.Unauthorized, response.StatusCode);
Assert.False(response.Headers.Location != null); // No redirect
}