2017-11-09 1 views
1

Ich entwickle eine asp.net-Kernanwendung, die Bilder Ordner unter wwwroot-Verzeichnis enthält. Mein Code sieht wie folgt ausAusführen von Code vor dem Umleiten zu einer statischen Datei

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
     app.UseStaticFiles(); 

     app.Map("/Images", images => 
     { 
      images.Map("/test.png", test => 
      { 
       printHello(app); 
      }); 
     }); 
    } 

private void printHello(IApplicationBuilder app) 
    { 
     app.Run(async (context) => 
     { 
      await context.Response.WriteAsync("Hello World!!"); 
     }); 
    } 

Also mein Problem ist, wenn ich die Anwendung und rufen Sie diese URL ausführen (http://localhost:5000/Images/test.png) seine das Bild zeigt, ohne auch nur die Abbildung der URL in Konfigurationsmethode. Ich brauche meinen Code, um den Code unten auszuführen, bevor ich das Image zeige, was ich hinzufügen soll.

Antwort

2
  1. StaticFiles Middleware stoppt die weitere Ausführung der Pipeline.

    Sie können versuchen OnPrepareResponse Handler zu verwenden, um etwas zu tun, bevor Antwort zurück an den Client gesendet werden:

    var staticFileOptions = new StaticFileOptions() 
        { 
         OnPrepareResponse = ctx => 
         { 
          // request is available via ctx.Context.Request 
          // response is available via ctx.Context.Response 
         } 
    
        }; 
    
    app.UseStaticFiles(staticFileOptions); 
    

  1. Middlewares genannt werden die Reihenfolge, die sie registriert haben. Selber Middleware vor Staticmiddleware und nicht-Pipeline Ausführung stoppen darin (nicht .Run verwenden)

    See, wenn Sie nur den Auftrag ersetzen (und beachten Sie, dass Sie printHello als Delegierter übergeben müssen, ist es nicht ausführen, sonst

    public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
    { 
        app.Map("/Images", images => 
        { 
         images.Map("/test.png", printHello); 
        }); 
    
        app.UseStaticFiles(); 
    } 
    

    nur erste Middleware wird nach wie vor, wie Sie app.Run(async (context) => innerhalb printHello verwenden ausgeführt werden: es wird während der App-Start), wie folgt ausgeführt werden.


  1. await context.Response.WriteAsync verwendete nur in final Middle in der Pipeline werden könnte, da dies die Reaktion beginnt und so weiter Middleware kann mit folgenden Ausnahme fehlschlagen:

    System.InvalidOperationException: "Header sind schreibgeschützt, die Antwort wurde bereits gestartet."

+0

auch nach dem Weg in Nummer 2 geschrieben mit und die app.Run von printHello Verfahren zu entfernen, hat der Code nicht die Methode eingeben und die mir diese Seite zu geben, wenn Aufruf der URL: _Die Bild „http : // localhost: 5000/Images/test.png "kann nicht angezeigt werden, weil es Fehler enthält. _ – Batman

+0

@Batman Ich habe die Nummer 2 aktualisiert. Ihr letztes Problem ist, dass' printHello' als zweiter Parameter an '.Map übergeben werden sollte 'Methode – Set

+0

Yh ich habe die aktualisierte verwendet, aber es nicht die Karte und es nicht das Bild – Batman

Verwandte Themen