以前,人们会在Global.aspx.cs中添加类似的内容,而在.NET Core中已经消失了:

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


这是我目前在Startup.cs中(对于.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" });
  });


问题在于,在MVC(内核前)中,routesRouteCollection,而在.NET Core中,它是Microsoft.AspNetCore.Routing.IRouteBuilder,因此IgnoreRoute不是有效的方法。

最佳答案

您可以为此编写middleware

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

关于asp.net-core - 如何忽略ASP.NET Core中的路由?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39517816/

10-15 14:28