Blazor Datei Download

Ich portiere unser CRM von ASP.NET Webforms zu Blazor. Unter anderem werden damit Emails als .eml Dateien erzeugt. Diese kann 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 in Programm.cs einbindet. Da ich mit einem URL Parameter arbeiten will, muss man 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