Bereitstellung dynamischer Dateien mit Blazor in ASP.NET

Inhalt

Eine der vielen tollen Funktionen von Rahmen wie Blazor und ASP.NET (in dem es läuft) ist die Fähigkeit, dynamische Inhalte an jeden Endpunkt zu liefern, den Ihre Anwendung benötigt. Wenn Sie generierte Dateidownloads bereitstellen möchten, Mit ein wenig Konfiguration geht das ganz einfach.

Warum dynamische Dateien bereitstellen??

Einfach, als Webserver hast du zwei Möglichkeiten: auf eine Anfrage mit statischem Inhalt antworten, als HTML-Seite oder JPG-Datei, oder eine benutzerdefinierte Antwort generieren, die an den Benutzer gesendet wird. Blazor läuft auf ASP.NET, so unterstützt der eingebaute HTTP-Server eine Vielzahl von Alternativen und ermöglicht eine große Flexibilität.

Als Beispiel, Vielleicht möchten Sie eine JSON-Datei hosten in /images/pathname.json. Es muss keine wörtliche Datei auf der Festplatte sein; der Server kann diese Anfrage interpretieren und mit jeder Art von Inhalt antworten, enthalten etwas Unerwartetes wie eine PNG-Datei. Sie können auf diese Anfrage antworten, indem Sie einige Ergebnisse von einer API abrufen, Erstellen einer Antwort und Senden der Zeichenfolge an den Benutzer.

Oder vielleicht möchten Sie die eigentliche Datei im Handumdrehen generieren. Als Beispiel, Es gibt viele Grafikbibliotheken, die verwendet werden, um benutzerdefinierte Bilder zu zeichnen. Sie können eine davon verwenden, um ein Bild zu generieren und mit den Daten auf die Anfrage des Benutzers zu antworten, alles in Erinnerung.

Im letzteren Fall, Es kann sinnvoll sein, die Lösung zwischenzuspeichern, indem Sie sie auf der Festplatte speichern und die meiste Zeit mit einer echten Datei antworten. Dies kann bei Dateigenerationen nützlich sein, die sehr ressourcenintensiv sind und sich nicht so oft ändern..

Konfigurieren

Ein solcher Dateidienst ist integriert und recht einfach zu machen. Sie müssen eine neue Razor-Seite erstellen, was ist Blazor Es wird ausgeführt in. Sie können dies tun, indem Sie in Visual Studio mit der rechten Maustaste klicken und Hinzufügen auswählen> Rasierer Seite.

Auf diese Weise, es werden zwei Dateien erstellt, die in der Hierarchie miteinander verknüpft sind: Name.cshtml, die die HTML-Seite der Dinge behandelt, und Name.cshtml.cs, die das Modell und den eigentlichen Code behandelt. Da dies keine echte Webseite sein wird, nur eine Datei, den ersten kannst du größtenteils ignorieren.

Trotz dieses, Sie müssen das konfigurieren @page Attribut mit dem übereinstimmen, wo diese Datei gehostet werden soll. Sie möchten wahrscheinlich einige Platzhalter einfügen, was machst du mit klammern.

Bei Name.cshtml.cs Datei, Sie werden einen echten Code sehen, der sich erweitert PageModel. Die Hauptfunktion hier ist OnGet(), zu dem Sie wahrscheinlich wechseln möchten OnGetAsync() wenn Sie eine asynchrone Verarbeitung durchführen.

Sie haben drei Hauptoptionen dieser Funktion. Entscheiden , gibt eine PhysicalFile zurück, das buchstäblich eine Datei auf der Festplatte mit einem Pfad liest und sie mit einem Typ an den Benutzer sendet, optional mit einem anderen Downloadnamen als dem tatsächlichen Pfad.

Obwohl es wahrscheinlich hier ist, um etwas dynamisch zu generieren, das kann beim Caching sehr nützlich sein. Wenn Ihre Renderfunktion das Ergebnis in einer Datei speichert, Sie können überprüfen, ob diese Datei vorhanden ist, bevor Sie sie erneut verarbeiten, und wenn ja, Gib einfach die zwischengespeicherte Lösung zurück.

Die nächste Option besteht darin, eine virtuelle Datei zurückzugeben, ein Byte-Array gegeben. Dies ist, was Sie für die meisten Anwendungen verwenden möchten, da es absolut auf Speicher arbeitet und sehr schnell sein soll.

Abhängig von der Codierung, die Sie verwenden möchten, Vielleicht möchten Sie einen String in ein Byte-Array umwandeln, indem Sie die Encoding Helferklasse.

Codierung.UTF8.GetBytes(Schnur);

Schließlich, kann einen Inhaltsstring direkt zurückgeben, was zu verwenden ist, wenn Sie dem Benutzer den Inhalt anzeigen möchten, anstatt einen Download in seinem Browser auszulösen.

Es gibt andere Optionen gleichzeitig von diesen dreien, aber der Rest besteht darin, mit Statuscodes zu antworten, umleiten, nicht autorisierte Antworten und die Seite selbst rendern.

Dateilieferung nach Pfaden und Parametern

Natürlich, nichts davon ist nützlich, wenn Sie nicht auf Anfragen reagieren können, die von Benutzereingaben unterstützt werden. Die beiden Eingabealternativen stehen in der URL: Routing-Parameter und URL-Parameter. Die Routing-Parameter sind die, die Sie über Wildcards auf der Seite selbst angegeben haben, und sind der eigentliche Pfad zur Datei. URL-Parameter sind optional.

Das herauszufinden kann ein bisschen schwierig sein, aber zum Glück hast du einen Debugger an deiner Seite, damit Sie einen Haltepunkt bei bestimmen können OnGetAsync() und sehen Sie sich den gesamten Baum lokaler Variablen an.

Du wirst es finden, unter this.PageContext.RouteData, da ist ein RouteValueDictionary<string, object> die alle Routen speichert. Beachten Sie, dass dies den Pfad der Seite selbst einschließt, also wenn du benutzt hast /Download/{param} als Route, der Parameter wird die zweite Option sein.

Der beste Weg, um die Parameter zu erhalten, besteht darin, sie nach dem Schlüssel zu durchsuchen:

Auf die gleiche Weise, Abfrageparameter sind ebenfalls verfügbar, auch wenn von einem anderen Objekt. Sie müssen eintreten HttpContext.Request.Query, die ein QueryValueDictionary welches die URL-Parameter enthält, und es funktioniert genauso wie der Pfad.

Nächste, Sie können diese Parameter verwenden, um Suchen durchzuführen oder die Logik zu beeinflussen. Trotz dieses, wenn Sie Antworten zwischenspeichern, Sie sollten sicherstellen, dass auch die Cache- und Suchbedingungen von diesen Parametern beeinflusst werden, oder Sie könnten Probleme mit unerwartetem Caching-Verhalten haben.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.