2016-09-15 19 views
9

Daha önce, bir .NET Core gitti Global.aspx.cs, böyle bir şey eklemek istiyorum: içindeASP.NET Core 1.0.1'deki yollar nasıl yok sayılır?

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

Şu anda ne var benim Startup.cs (NET Çekirdek):

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" }); 
    }); 

Sorun, MVC (çekirdek öncesi) routes'un RouteCollection ve .NET Çekirdeğinin Microsoft.AspNetCore.Routing.IRouteBuilder olması ve IgnoreRoute geçerli bir yöntem olmamasıdır.

cevap

11

Bunun için middleware yazabilirsiniz. Eğer yönlendirme koşulu olmayan statik bir dosya erişilebilir olmak için

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

Teşekkür bakın, ama aşağı kaynamaya: Ben bütün bir özel rota ile bir satır kodun değiştirmelisiniz? Biraz şişmiş gibi görünüyor. –

+1

Belki? .NET Core'da endişelerinizi doğrudan yönlendiren bir yol olabilir. Belki Yönlendirme ara katman yazılımı ile. Sadece buna katılmadım. Bu belgeyi okuyacağım ve daha kesin bir şey elde etmek için kaynak kodunu kontrol ediyorum: https://docs.asp.net/en/latest/fundamentals/routing.html – Technetium

+0

Teşekkürler, bunu diğer potansiyel cevaplar için açık bırakacağım şimdi. Eğer sizinki en iyi seçenek olmaktan çıkıyorsa, geri dönüp daha sonraki bir tarihte işaretleyeceğim! (Endişelenmeyin, sürekli SO kullanıyorum.) –

4

, basitçe StaticFiles Middleware yılında yap-kullanın. Yapılandırma Yönteminde app.UseStaticFiles(); ile etkinleştirin ve statik dosyalarınızı wwwroot dizinine koyun. Onlar HOST availible konum /yourStaticFile fazla bilgi için

, here

+2

Yığın Taşmasına Hoş Geldiniz! Doğru yoldasın, ama deyim olarak bu cevaptan daha çok yorum isteme-açıklamadır. "Statik dosyaları erişilebilir hale getirmeye çalışıyorsanız, kullanabilirsiniz ..." gibi bir ifadeyi yeniden yazabilir ve belki de içeriğe bir örnek verebilirsiniz. 50 veya daha fazla bir itibar elde ederseniz, bunun yerine yorum gönderebileceksiniz. İşte [http://stackoverflow.com/help/privileges](Her birini elde etmek için ihtiyacınız olan ayrıcalıklar listesi ve şöhret]. İyi şanslar! –

2

public void Configure

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

favori simgesi istekleri rota işleyicisi tarafından ayrıştırılması etmesine ve tutmak eklemek bakın rotalarınızı minimumda. Ara katman kullanmaktan kaçının, bu sadece kodunuza ek karmaşıklık katar ve diğer tüm isteklerin, meşgul işleyicilerinden performans açısından daha kötü olan rota işleyicisinden önce ara yazılımdan geçmesi gerektiği anlamına gelir. Meşgul olmayan web siteleri için zamanınızı endişelendiriyor olacaksınız.

bunun için çok https://github.com/aspnet/Routing/issues/207