2016-09-15 4 views
9

Früher hätte man so etwas zu Global.aspx.cs hinzufügen, die in .NET-Core ist weg:Wie können Routen in ASP.NET Core 1.0.1 ignoriert werden?

routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 

Hier ist, was ich habe zur Zeit in meinem Startup.cs (für .NET Core):

app.UseDefaultFiles(); 

    app.UseStaticFiles(); 

    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Index}/{id?}"); 

     routes.MapSpaFallbackRoute(
      name: "spa-fallback", 
      defaults: new { controller = "Home", action = "Index" }); 
    }); 

Das Problem ist, dass in MVC (Pre-Core) war ein RouteCollection und in .NET Core ist es ein Microsoft.AspNetCore.Routing.IRouteBuilder so IgnoreRoute ist keine gültige Methode.

Antwort

11

Sie könnten dafür middleware schreiben.

public void Configure(IApplciationBuilder app) { 
    app.UseDefaultFiles(); 

    // Make sure your middleware is before whatever handles 
    // the resource currently, be it MVC, static resources, etc. 
    app.UseMiddleware<IgnoreRouteMiddleware>(); 

    app.UseStaticFiles(); 
    app.UseMvc(); 
} 

public class IgnoreRouteMiddleware { 

    private readonly RequestDelegate next; 

    // You can inject a dependency here that gives you access 
    // to your ignored route configuration. 
    public IgnoreRouteMiddleware(RequestDelegate next) { 
     this.next = next; 
    } 

    public async Task Invoke(HttpContext context) { 
     if (context.Request.Path.HasValue && 
      context.Request.Path.Value.Contains("favicon.ico")) { 

      context.Response.StatusCode = 404; 

      Console.WriteLine("Ignored!"); 

      return; 
     } 

     await next.Invoke(context); 
    } 
} 
+1

Vielen Dank für diesen sehr viel, aber es einkochen: Ich mit einer ganzen individuellen Route eine Zeile Code ersetzen muss? Scheint irgendwie aufgebläht. –

+1

Vielleicht? Es kann einen Weg in .NET Core geben, der Ihr Anliegen direkter anspricht. Vielleicht über die Routing-Middleware. Ich bin einfach nicht darauf gestoßen. Ich würde dieses Dokument lesen und dann den Quellcode überprüfen, um etwas Definitiveres zu erhalten: https://docs.asp.net/en/latest/fundamentals/routing.html – Technetium

+0

Danke, ich lasse das offen für andere mögliche Antworten jetzt. Wenn deins die beste Wahl ist, komme ich zurück und markiere es zu einem späteren Zeitpunkt! (Keine Sorge, ich benutze SO ständig.) –

4

Wenn Sie eine statische Datei zugänglich, ohne dass die Routing-Bedingung machen möchten, verwenden Sie einfach die build-in StaticFiles Middleware. Aktivieren Sie es mit app.UseStaticFiles(); in Configure Method und legen Sie Ihre statischen Dateien in wwwroot Verzeichnis. Sie availible sind auf HOST/yourStaticFile

Weitere Informationen finden here

+2

Willkommen bei Stack Overflow! Sie sind auf dem richtigen Weg, obwohl dies, wie gesagt, eher eine Klärung der Kommentare als eine Antwort ist. Sie könnten ein wenig wie "Wenn Sie versuchen, statische Dateien zugänglich zu machen, könnten Sie ... verwenden" und vielleicht ein Beispiel im Kontext bereitstellen. Wenn Sie eine Reputation von 50 oder mehr erwerben, können Sie stattdessen Kommentare posten. Hier ist [http://stackoverflow.com/help/privileges>(die Liste der Privilegien und die Reputation, die Sie benötigen, um jedes von ihnen zu erhalten). Viel Glück! –

2

innen public void Configure

hinzufügen

app.Map("/favicon.ico", delegate { }); 
1

Favicon Anfragen zulassen durch den Routenhandler analysiert werden, und halten Deine Wege auf ein Minimum. Vermeiden Sie die Verwendung von Middleware, dies fügt Ihrem Code zusätzliche Komplexität hinzu und bedeutet, dass alle anderen Anforderungen vor dem Routen-Handler durch die Middleware gehen müssen, was hinsichtlich der Leistung für stark frequentierte Websites schlechter ist. Für Websites, die nicht beschäftigt sind, würden Sie nur Ihre Zeit damit verschwenden, sich darüber Gedanken zu machen.

Siehe https://github.com/aspnet/Routing/issues/207

Verwandte Themen