ASP.NET Core 8 TypedResults.File mit ETag, das immer ein Ergebnis aus dem Browser-Festplattencache zurückgibtC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 ASP.NET Core 8 TypedResults.File mit ETag, das immer ein Ergebnis aus dem Browser-Festplattencache zurückgibt

Post by Anonymous »

Ich habe einen einfachen ASP.NET Core 8-Endpunkt, der eine TypedResults.File mit einem ETag zurückgibt. Beim ersten Mal, wenn ich den Endpunkt erreiche, wird die Datei zu 100 % in Ordnung zurückgegeben.
Beim zweiten (und folgenden) Mal erreiche ich den Endpunkt mit derselben Instanz des Browsers Ich erhalte ein HTTP 200 OK (vom Festplatten-Cache) – es stellt nie die eigentliche Anfrage an meinen Localhost-Server.
Hier ist der Netzwerkverkehr der 2x Anfragen:
Anfrage 1:
Image

Anfrage 2 (die es aus dem Festplatten-Cache holt)
Image

I dachte, dass, wenn die erste Anfrage ein ETag zurückgibt, der Browser „intelligent genug“ ist, um nachfolgende Anfragen mit dem ETag + „If-None-Match“-Anfrageheader durchzuführen?
Dies ist der Code, der die Datei generiert hat

Code: Select all

var etag = new EntityTagHeaderValue($"\"{invoicePdfVersion}-{lastModifiedOn.Ticks}\"");

return TypedResults.File(
pdfData, // byte array of pdf data
"application/pdf", // content type
"testing", // filename
false, // enable range processing
lastModifiedOn, // DateTime when the file was last updated/modified
etag); // etag value
Ich verstehe, dass ich Folgendes zur Antwort hinzufügen könnte:

Code: Select all

context.Response.Headers.CacheControl = "no-cache";
Was verhindert meiner Meinung nach das Auftreten des Festplattencaches, bin mir aber nicht sicher, ob dies erforderlich ist? Sollte der MS-Code für ReturnTypes.File nicht alle Header korrekt einrichten, sodass ich nichts weiter tun muss?
Ich habe einen serverseitigen Code, der den ETag überprüft:

Code: Select all

if (context.Request.Headers.TryGetValue(HeaderNames.IfNoneMatch, out var ifNoneMatch) &&
ifNoneMatch == etag.ToString())
{
return TypedResults.StatusCode(304); // HTTP NotModified.
}
Aber das wird natürlich nie getroffen.
Was kann ich als nächstes versuchen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post