Blazor Datei Download

Ich portiere unser CRM von ASP.NET Webforms zu Blazor. Unter anderem werden damit Emails als .eml Dateien erzeugt. Diese kann der User sich als Liste darstellen lassen und per Click den Inhalt ansehen. Bisher war das ein Zweizeiler in VB.NET. Eine ASPX Datei, der Content Type gesetzt und den Binary Stream per Response.Write bzw. BinaryWrite.

Ich mag diese Lösung, weil man als Entwickler sieht was passiert. Ein Hyperlink auf die .aspx Seite und die Datei in der Url im FriendlyUrlsegments Style.

Mit Blazor kann man nicht sinnvoll Dateien vom Server runter laden. Bestenfalls per cshtml Razor Datei um bei der Analogie zu Webforms zu bleiben. Aber leider kann man nicht einfach in den Response Stream schreiben. Das geht nur mit Middleware die man im Programm.cs einbindet. Da ich mit einem URL Parameter arbeiten will, muss ich einen Endpoint definieren um das Routing entsprechend aufzulösen:

   1:  app.UseEndpoints(endpoints =>
   2:  {
   3:      endpoints.MapGet("/app/emailopen/{datei}", async context =>
   4:      {
   5:          var datei = context.GetRouteValue("datei");
   6:          context.Response.ContentType = "application/vsd.ms-outlook";
   7:          await context.Response.SendFileAsync(
System.IO.Path.Combine(builder.Configuration["AppSettings:mailfilepath"], datei.ToString()));
   8:      });
   9:  });
Kommentare sind geschlossen