以前,人们会将此类内容添加到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(pre-Core)中routes
是RouteCollection
而在.NET Core中它是Microsoft.AspNetCore.Routing.IRouteBuilder
所以IgnoreRoute
不是有效的方法。
答案 0 :(得分:15)
你可以为此写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);
}
}
答案 1 :(得分:5)
如果要在没有路由条件的情况下访问静态文件,只需使用内置StaticFiles Middleware
。
使用app.UseStaticFiles();
激活它
在Configure Method中,将静态文件放在wwwroot目录中。
它们适用于HOST / yourStaticFile
有关详细信息,请参阅here
答案 2 :(得分:4)
在public void Configure
添加
app.Map("/favicon.ico", delegate { });
答案 3 :(得分:3)
对于具有端点路由的.NET Core 3.1,这似乎是最简单的方法。您无需仅为这种简单情况构建中间件。
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/favicon.ico", async (context) =>
{
context.Response.StatusCode = 404;
});
// more routing
});
答案 4 :(得分:2)
允许路由处理程序解析favicon请求,并将路由保持在最低限度。避免使用中间件,这只会增加代码的复杂性,并且意味着所有其他请求必须在路由处理程序之前通过中间件,这在繁忙网站的性能方面更糟糕。对于不忙的网站,你只会浪费时间来担心这个问题。
答案 5 :(得分:-1)
在ASP.NET Core中,您可以编写受约束的全部路由模板。为此,在您的ASP.NET Core示例中,将对routes.MapSpaFallbackRoute
的调用替换为以下内容:
// Returns the home/index page for unknown files, except for
// favicon.ico, in which case a 404 error is returned.
routes.MapRoute(
name: "spa-fallback",
template: "{*url:regex(^(?!favicon.ico).*$)}",
defaults: new { Controller = "Home", action = "Index" });