Dela via


Cachelagring av mellanprogram för svar i ASP.NET Core

Av John Luo och Rick Anderson

I den här artikeln beskrivs hur du konfigurerar cachelagring av svarsmellanprogram i en ASP.NET Core-app. Mellanprogrammet avgör när svar kan cachelagrats, lagrar svar och hanterar svar från cacheminnet. En introduktion till HTTP-cachelagring och [ResponseCache] attributet finns i Svarscachelagring.

Mellanprogrammet För cachelagring av svar:

  • Aktiverar cachelagring av serversvar baserat på HTTP-cachehuvuden. Implementerar standard-HTTP-cachelagringssemantik. Cacheminnen baserade på HTTP-cachehuvuden som proxyservrar gör.
  • Är vanligtvis inte fördelaktigt för användargränssnittsappar som Razor Pages eftersom webbläsare vanligtvis anger begärandehuvuden som förhindrar cachelagring. Cachelagring av utdata, som är tillgängligt i .NET 7 eller senare, gynnar användargränssnittsappar. Med cachelagring av utdata bestämmer konfigurationen vad som ska cachelagras oberoende av HTTP-huvuden.
  • Kan vara fördelaktigt för offentliga GET- eller HEAD API-begäranden från klienter där villkor för cachelagring uppfylls.

Om du vill testa cachelagring av svar använder du Fiddlereller ett annat verktyg som uttryckligen kan ange begärandehuvuden. Att ange rubriker uttryckligen är att föredra för testning av cachelagring. Mer information finns i Felsökning.

Configuration

I Program.cslägger du till tjänsten Response Caching Middleware AddResponseCaching i tjänstsamlingen och konfigurerar appen så att den använder mellanprogrammet med UseResponseCaching tilläggsmetoden. UseResponseCaching lägger till mellanprogrammet i pipelinen för bearbetning av begäranden:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddResponseCaching();

var app = builder.Build();

app.UseHttpsRedirection();

// UseCors must be called before UseResponseCaching
//app.UseCors();

app.UseResponseCaching();

Warning

UseCors måste anropas innan UseResponseCaching du använder CORS-mellanprogram.

Exempelappen lägger till rubriker för att styra cachelagring vid efterföljande begäranden:

  • Cache-Control: Cachelagrar cachebara svar i upp till 10 sekunder.
  • Variera: Konfigurerar mellanprogrammet för att endast hantera ett cachelagrat svar om rubriken Accept-Encoding för efterföljande begäranden matchar den ursprungliga begäran.
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddResponseCaching();

var app = builder.Build();

app.UseHttpsRedirection();

// UseCors must be called before UseResponseCaching
//app.UseCors();

app.UseResponseCaching();

app.Use(async (context, next) =>
{
    context.Response.GetTypedHeaders().CacheControl =
        new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
        {
            Public = true,
            MaxAge = TimeSpan.FromSeconds(10)
        };
    context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
        new string[] { "Accept-Encoding" };

    await next();
});

app.MapGet("/", () => DateTime.Now.Millisecond);

app.Run();

Föregående rubriker skrivs inte till svaret och åsidosätts när en kontroller, åtgärd eller Razor Sida:

  • Har ett [ResponseCache]- attribut. Detta gäller även om en egenskap inte har angetts. Om du till exempel utelämnar egenskapen VaryByHeader tas motsvarande rubrik bort från svaret.

Response Caching Middleware cachelagrar endast serversvar som resulterar i statuskoden 200 (OK). Andra svar, inklusive felsidor, ignoreras av mellanprogrammet.

Warning

Svar som innehåller innehåll för autentiserade klienter måste markeras som inte cachebara för att förhindra att mellanprogrammet lagrar och hanterar dessa svar. Mer information om hur mellanprogrammet avgör om ett svar kan cachelagras finns i Villkor för cachelagring .

Föregående kod returnerar vanligtvis inte ett cachelagrat värde till en webbläsare. Använd Fiddler eller ett annat verktyg som uttryckligen kan ange begärandehuvuden och som rekommenderas för testning av cachelagring. Mer information finns i Felsökning i den här artikeln.

Options

Alternativ för cachelagring av svar visas i följande tabell.

Option Description
MaximumBodySize Den största cachebara storleken för svarstexten i byte. Standardvärdet är 64 * 1024 * 1024 (64 MB).
SizeLimit Storleksgränsen för svarscache-mellanmjukvaran i byte. Standardvärdet är 100 * 1024 * 1024 (100 MB).
UseCaseSensitivePaths Avgöra huruvida svar cachelagras på skiftlägeskänsliga sökvägar. Standardvärdet är false.

I följande exempel konfigureras mellanprogrammet till:

  • Cachesvar med en brödtextstorlek som är mindre än eller lika med 1 024 byte.
  • Lagra svaren efter skiftlägeskänsliga sökvägar. Till exempel /page1 och /Page1 lagras separat.
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddResponseCaching(options =>
{
    options.MaximumBodySize = 1024;
    options.UseCaseSensitivePaths = true;
});

var app = builder.Build();

app.UseHttpsRedirection();

// UseCors must be called before UseResponseCaching
//app.UseCors();

app.UseResponseCaching();

app.Use(async (context, next) =>
{
    context.Response.GetTypedHeaders().CacheControl =
        new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
        {
            Public = true,
            MaxAge = TimeSpan.FromSeconds(10)
        };
    context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] =
        new string[] { "Accept-Encoding" };

    await next(context);
});

app.MapGet("/", () => DateTime.Now.Millisecond);

app.Run();

VaryByQueryKeys

När du använder MVC, webb-API-kontroller eller sidmodeller för Razor sidor, specificerar [ResponseCache] attributet de parametrar som krävs för att ställa in lämpliga huvuden för cachelagring av svar. Den enda parametern för [ResponseCache] attributet som strikt kräver mellanprogrammet är VaryByQueryKeys, vilket inte motsvarar ett faktiskt HTTP-huvud. För mer information, se Cachning av svar i ASP.NET Core.

Om du inte använder [ResponseCache]-attributet, kan cachelagring varieras med VaryByQueryKeys. Använd ResponseCachingFeature direkt från HttpContext.Features.

var responseCachingFeature = context.HttpContext.Features.Get<IResponseCachingFeature>();

if (responseCachingFeature != null)
{
    responseCachingFeature.VaryByQueryKeys = new[] { "MyKey" };
}

Om du använder ett enda värde som är lika med * i VaryByQueryKeys varierar cachen efter alla frågeparametrar för begäran.

HTTP-huvuden som används av mellanprogram för cachelagring av svar

Följande tabell innehåller information om HTTP-huvuden som påverkar cachelagring av svar.

Header Details
Authorization Svaret cachelagras inte om headern finns.
Cache-Control Mellanprogrammet tar endast hänsyn till cachelagringssvar som markerats med public cachedirektivet. Kontrollera cachelagring med följande parametrar:
  • max-age
  • max-stale†
  • min-fresh
  • must-revalidate
  • no-cache
  • no-store
  • only-if-cached
  • private
  • public
  • s-maxage
  • proxy-revalidate‡
†Om ingen gräns har angetts till max-stalevidtar mellanprogrammet ingen åtgärd.
proxy-revalidate‡ har samma effekt som must-revalidate.

Mer information finns i RFC 9111: Begärandedirektiv.
Pragma En Pragma: no-cache rubrik i begäran ger samma effekt som Cache-Control: no-cache. Den här rubriken åsidosätts av relevanta direktiv i Cache-Control-rubriken, om den finns. Beaktas för bakåtkompatibilitet med HTTP/1.0.
Set-Cookie Svaret cachelagras inte om headern finns. Alla mellanprogramvara i begärandebehandlingspipeline som anger en eller flera cookies förhindrar att mellanprogramvara för svarscachelagring cachelagrar svaret (till exempel den cookie-baserade TempData-leverantören).
Vary Rubriken Vary används för att variera det cachelagrade svaret med en annan rubrik. Till exempel cachelagrar du svar genom att koda genom att inkludera Vary: Accept-Encoding rubriken, som cachelagrar svar för begäranden med rubriker Accept-Encoding: gzip och Accept-Encoding: text/plain separat. Ett svar med huvudvärdet * lagras aldrig.
Expires Ett svar som anses inaktuellt enligt denna rubrik (Cache-Control) lagras eller hämtas endast om det åsidosätts av andra rubriker.
If-None-Match Det fullständiga svaret hanteras från cacheminnet om värdet inte är * och ETag av svaret inte matchar något av de angivna värdena. Annars returneras ett 304-svar (inte ändrad).
If-Modified-Since If-None-Match Om rubriken inte finns, serveras ett fullständigt svar från cacheminnet om det cachelagrade svarsdatumet är nyare än det angivna värdet. I annat fall hanteras svaret 304 – Inte ändrad .
Date När du serverar från cachen ställs Date-huvudmannen in av mellanprogrammet, om det inte redan angavs i det ursprungliga svaret.
Content-Length När du serverar från cachen ställs Content-Length-huvudmannen in av mellanprogrammet, om det inte redan angavs i det ursprungliga svaret.
Age Det headern Age som skickades i det ursprungliga svaret ignoreras. Mellanprogrammet beräknar ett nytt värde när du hanterar ett cachelagrat svar.

Cachelagring respekterar begäran Cache-Control direktiv

Mellanprogrammet respekterar reglerna för RFC 9111: HTTP-cachelagring (avsnitt 5.2. Cache-Control). Reglerna kräver en cache för att uppfylla ett giltigt Cache-Control huvud som skickas av klienten. Enligt specifikationen kan en klient göra begäranden med ett no-cache huvudvärde och tvinga servern att generera ett nytt svar för varje begäran. För närvarande finns det ingen utvecklarkontroll över det här cachelagringsbeteendet när du använder mellanprogrammet eftersom mellanprogrammet följer den officiella cachelagringsspecifikationen.

Mer kontroll över cachelagringsbeteende finns i andra cachelagringsfunktioner i ASP.NET Core. Se följande avsnitt:

Troubleshooting

Mellanprogrammet för svarscachelagring använder IMemoryCache, som har en begränsad kapacitet. När kapaciteten överskrids komprimeras minnescachen (TriggerOvercapacityCompaction).

Note

Dokumentationslänkar till .NET-referenskällan läser vanligtvis in lagringsplatsens standardgren, vilket representerar den aktuella utvecklingen för nästa version av .NET. Om du vill välja en tagg för en specifik version använder du listrutan Välj bland grenar eller taggar. Mer information finns i Så här väljer du en versionstagg för ASP.NET Core-källkod (dotnet/AspNetCore.Docs #26205).

Om cachelagringsbeteendet inte är som förväntat kontrollerar du att svaren kan cachelagras och kan hanteras från cachen. Granska begärans inkommande huvuden och svarets utgående huvuden. Aktivera loggning för att hjälpa till med felsökning.

När du testar och felsöker cachelagringsbeteendet anger en webbläsare vanligtvis begärandehuvuden som förhindrar cachelagring. En webbläsare kan till exempel ange Cache-Control rubriken till no-cache eller max-age=0 när en sida uppdateras. Fiddler och andra verktyg kan uttryckligen ange begärandehuvuden och rekommenderas för testning av cachelagring.

Villkor för cachelagring

  • Begäran måste resultera i ett serversvar med statuskoden 200 (OK).
  • Begärandemetoden måste vara GET eller HEAD.
  • Mellanprogram för cachelagring av svar måste placeras före mellanprogram som kräver cachelagring. Mer information finns i ASP.NET Core Middleware.
  • Rubriken Authorization får inte finnas.
  • Cache-Control huvudparametrarna måste vara giltiga och svaret måste vara markerat public och inte markerat private.
  • Rubriken Pragma: no-cache får inte finnas om rubriken Cache-Control inte finns, eftersom rubriken Cache-Control åsidosätter rubriken Pragma när den finns.
  • Rubriken Set-Cookie får inte finnas.
  • Vary huvudparametrarna måste vara giltiga och inte lika med *.
  • Rubrikvärdet Content-Length (om det anges) måste matcha storleken på svarstexten.
  • Används IHttpSendFileFeature inte.
  • Svaret får inte vara inaktuellt enligt huvud Expires och cachedirektiven max-age och s-maxage.
  • Buffring av svar måste lyckas. Svarets storlek måste vara mindre än den konfigurerade eller standardmässiga SizeLimit. Brödtextstorleken för svaret måste vara mindre än den konfigurerade eller standardmässiga MaximumBodySize.
  • Svaret måste vara cachelagrat enligt RFC 9111: HTTP-cachelagring. Direktivet får till exempel inte finnas i fälten no-store för begärande- eller svarshuvud. Mer information finns i RFC 9111: HTTP-cachelagring (avsnitt 3: Lagra svar i cacheminnen .

Note

Antiförfalskningssystemet för att generera säkra tokens för att förhindra CSRF-attacker (Cross-Site Request Forgery) ställer in Cache-Control och Pragma huvudena till no-cache så att svar inte cachelagras. Information om hur du inaktiverar antiforgery-token för HTML-formulärelement finns i Förhindra XSRF-/CSRF-attacker (Cross-Site Request Forgery) i ASP.NET Core.

Ytterligare resurser

I den här artikeln beskrivs hur du konfigurerar mellanprogram för svarscachelagring i en ASP.NET Core-app. Mellanprogrammet avgör när svar kan cachelagrats, lagrar svar och hanterar svar från cacheminnet. En introduktion till HTTP-cachelagring och [ResponseCache] attributet finns i Svarscachelagring.

Visa eller ladda ned exempelkod (hur du laddar ned)

Configuration

Response Caching Middleware är implicit tillgängligt för ASP.NET Core-applikationer via det gemensamma ramverket.

I Startup.ConfigureServiceslägger du till mellanprogrammet För cachelagring av svar i tjänstsamlingen:

public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCaching();
    services.AddRazorPages();
}

Konfigurera appen så att den använder mellanprogrammet med UseResponseCaching tilläggsmetoden, som lägger till mellanprogrammet i pipelinen för bearbetning av begäran i Startup.Configure:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
    }

    app.UseStaticFiles();
    app.UseRouting();
    // UseCors must be called before UseResponseCaching
    // app.UseCors("myAllowSpecificOrigins");

    app.UseResponseCaching();

    app.Use(async (context, next) =>
    {
        context.Response.GetTypedHeaders().CacheControl = 
            new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
            {
                Public = true,
                MaxAge = TimeSpan.FromSeconds(10)
            };
        context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] = 
            new string[] { "Accept-Encoding" };

        await next();
    });

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
}

Warning

UseCors måste anropas innan UseResponseCaching du använder CORS-mellanprogram.

Exempelappen lägger till rubriker för att styra cachelagring vid efterföljande begäranden:

  • Cache-Control: Cachelagrar cachebara svar i upp till 10 sekunder.
  • Variera: Konfigurerar mellanprogrammet för att endast hantera ett cachelagrat svar om rubriken Accept-Encoding för efterföljande begäranden matchar den ursprungliga begäran.
// using Microsoft.AspNetCore.Http;

app.Use(async (context, next) =>
{
    context.Response.GetTypedHeaders().CacheControl = 
        new Microsoft.Net.Http.Headers.CacheControlHeaderValue()
        {
            Public = true,
            MaxAge = TimeSpan.FromSeconds(10)
        };
    context.Response.Headers[Microsoft.Net.Http.Headers.HeaderNames.Vary] = 
        new string[] { "Accept-Encoding" };

    await next();
});

Föregående rubriker skrivs inte till svaret och åsidosätts när en kontroller, åtgärd eller Razor Sida:

  • Har ett [ResponseCache]- attribut. Detta gäller även om en egenskap inte har angetts. Om du till exempel utelämnar egenskapen VaryByHeader tas motsvarande rubrik bort från svaret.

Response Caching Middleware cachelagrar endast serversvar som resulterar i statuskoden 200 (OK). Andra svar, inklusive felsidor, ignoreras av mellanprogrammet.

Warning

Svar som innehåller innehåll för autentiserade klienter måste markeras som inte cachebara för att förhindra att mellanprogrammet lagrar och hanterar dessa svar. Mer information om hur mellanprogrammet avgör om ett svar kan cachelagras finns i Villkor för cachelagring .

Options

Alternativ för cachelagring av svar visas i följande tabell.

Option Description
MaximumBodySize Den största cachebara storleken för svarstexten i byte. Standardvärdet är 64 * 1024 * 1024 (64 MB).
SizeLimit Storleksgränsen för svarscache-mellanmjukvaran i byte. Standardvärdet är 100 * 1024 * 1024 (100 MB).
UseCaseSensitivePaths Avgöra huruvida svar cachelagras på skiftlägeskänsliga sökvägar. Standardvärdet är false.

I följande exempel konfigureras mellanprogrammet till:

  • Cachesvar med en brödtextstorlek som är mindre än eller lika med 1 024 byte.
  • Lagra svaren efter skiftlägeskänsliga sökvägar. Till exempel /page1 och /Page1 lagras separat.
services.AddResponseCaching(options =>
{
    options.MaximumBodySize = 1024;
    options.UseCaseSensitivePaths = true;
});

VaryByQueryKeys

När du använder MVC/webb-API-kontrollanter eller Razor sidmodeller [ResponseCache] för sidor anger attributet de parametrar som krävs för att ange lämpliga rubriker för cachelagring av svar. Den enda parametern för [ResponseCache] attributet som strikt kräver mellanprogrammet är VaryByQueryKeys, vilket inte motsvarar ett faktiskt HTTP-huvud. För mer information, se Cachning av svar i ASP.NET Core.

Om du inte använder [ResponseCache]-attributet, kan cachelagring varieras med VaryByQueryKeys. Använd ResponseCachingFeature direkt från HttpContext.Features.

var responseCachingFeature = context.HttpContext.Features.Get<IResponseCachingFeature>();

if (responseCachingFeature != null)
{
    responseCachingFeature.VaryByQueryKeys = new[] { "MyKey" };
}

Om du använder ett enda värde som är lika med * i VaryByQueryKeys varierar cachen efter alla frågeparametrar för begäran.

HTTP-huvuden som används av mellanprogram för cachelagring av svar

Följande tabell innehåller information om HTTP-huvuden som påverkar cachelagring av svar.

Header Details
Authorization Svaret cachelagras inte om headern finns.
Cache-Control Mellanprogrammet tar endast hänsyn till cachelagringssvar som markerats med public cachedirektivet. Kontrollera cachelagring med följande parametrar:
  • max-age
  • max-stale†
  • min-fresh
  • must-revalidate
  • no-cache
  • no-store
  • only-if-cached
  • private
  • public
  • s-maxage
  • proxy-revalidate‡
†Om ingen gräns har angetts till max-stalevidtar mellanprogrammet ingen åtgärd.
proxy-revalidate‡ har samma effekt som must-revalidate.

Mer information finns i RFC 9111: Begärandedirektiv.
Pragma En Pragma: no-cache rubrik i begäran ger samma effekt som Cache-Control: no-cache. Den här rubriken åsidosätts av relevanta direktiv i Cache-Control-rubriken, om den finns. Beaktas för bakåtkompatibilitet med HTTP/1.0.
Set-Cookie Svaret cachelagras inte om headern finns. Alla mellanprogramvara i begärandebehandlingspipeline som anger en eller flera cookies förhindrar att mellanprogramvara för svarscachelagring cachelagrar svaret (till exempel den cookie-baserade TempData-leverantören).
Vary Rubriken Vary används för att variera det cachelagrade svaret med en annan rubrik. Till exempel cachelagrar du svar genom att koda genom att inkludera Vary: Accept-Encoding rubriken, som cachelagrar svar för begäranden med rubriker Accept-Encoding: gzip och Accept-Encoding: text/plain separat. Ett svar med huvudvärdet * lagras aldrig.
Expires Ett svar som anses inaktuellt enligt denna rubrik (Cache-Control) lagras eller hämtas endast om det åsidosätts av andra rubriker.
If-None-Match Det fullständiga svaret hanteras från cacheminnet om värdet inte är * och ETag av svaret inte matchar något av de angivna värdena. Annars returneras ett 304-svar (inte ändrad).
If-Modified-Since If-None-Match Om rubriken inte finns, serveras ett fullständigt svar från cacheminnet om det cachelagrade svarsdatumet är nyare än det angivna värdet. I annat fall hanteras svaret 304 – Inte ändrad .
Date När du serverar från cachen ställs Date-huvudmannen in av mellanprogrammet, om det inte redan angavs i det ursprungliga svaret.
Content-Length När du serverar från cachen ställs Content-Length-huvudmannen in av mellanprogrammet, om det inte redan angavs i det ursprungliga svaret.
Age Det headern Age som skickades i det ursprungliga svaret ignoreras. Mellanprogrammet beräknar ett nytt värde när du hanterar ett cachelagrat svar.

Cachelagring respekterar begäran Cache-Control direktiv

Mellanprogrammet respekterar reglerna för RFC 9111: HTTP-cachelagring (avsnitt 5.2. Cache-Control). Reglerna kräver en cache för att uppfylla ett giltigt Cache-Control huvud som skickas av klienten. Enligt specifikationen kan en klient göra begäranden med ett no-cache huvudvärde och tvinga servern att generera ett nytt svar för varje begäran. För närvarande finns det ingen utvecklarkontroll över det här cachelagringsbeteendet när du använder mellanprogrammet eftersom mellanprogrammet följer den officiella cachelagringsspecifikationen.

Mer kontroll över cachelagringsbeteende finns i andra cachelagringsfunktioner i ASP.NET Core. Se följande avsnitt:

Troubleshooting

Om cachelagringsbeteendet inte är som förväntat kontrollerar du att svaren kan cachelagras och kan hanteras från cachen. Granska begärans inkommande huvuden och svarets utgående huvuden. Aktivera loggning för att hjälpa till med felsökning.

När du testar och felsöker cachelagringsbeteendet kan en webbläsare ange begärandehuvuden som påverkar cachelagring på oönskade sätt. En webbläsare kan till exempel ange Cache-Control rubriken till no-cache eller max-age=0 när en sida uppdateras. Följande verktyg kan uttryckligen ange begärandehuvuden och rekommenderas för testning av cachelagring:

Villkor för cachelagring

  • Begäran måste resultera i ett serversvar med statuskoden 200 (OK).
  • Begärandemetoden måste vara GET eller HEAD.
  • I Startup.Configure måste mellanprogram för svarscachelagring placeras före mellanprogram som kräver cachelagring. Mer information finns i ASP.NET Core Middleware.
  • Rubriken Authorization får inte finnas.
  • Cache-Control huvudparametrarna måste vara giltiga och svaret måste vara markerat public och inte markerat private.
  • Rubriken Pragma: no-cache får inte finnas om rubriken Cache-Control inte finns, eftersom rubriken Cache-Control åsidosätter rubriken Pragma när den finns.
  • Rubriken Set-Cookie får inte finnas.
  • Vary huvudparametrarna måste vara giltiga och inte lika med *.
  • Rubrikvärdet Content-Length (om det anges) måste matcha storleken på svarstexten.
  • Används IHttpSendFileFeature inte.
  • Svaret får inte vara inaktuellt enligt huvud Expires och cachedirektiven max-age och s-maxage.
  • Buffring av svar måste lyckas. Svarets storlek måste vara mindre än den konfigurerade eller standardmässiga SizeLimit. Brödtextstorleken för svaret måste vara mindre än den konfigurerade eller standardmässiga MaximumBodySize.
  • Svaret måste vara cachelagrat enligt RFC 9111: HTTP-cachelagring. Direktivet får till exempel inte finnas i fälten no-store för begärande- eller svarshuvud. Mer information finns i RFC 9111: HTTP-cachelagring (avsnitt 3: Lagra svar i cacheminnen .

Note

Antiförfalskningssystemet för att generera säkra tokens för att förhindra CSRF-attacker (Cross-Site Request Forgery) ställer in Cache-Control och Pragma huvudena till no-cache så att svar inte cachelagras. Information om hur du inaktiverar antiforgery-token för HTML-formulärelement finns i Förhindra XSRF-/CSRF-attacker (Cross-Site Request Forgery) i ASP.NET Core.

Ytterligare resurser