以前は、次のようなものを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
は有効なメソッドではないということです。
このために 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);
}
}
ルーティング条件なしで静的ファイルにアクセスできるようにするには、ビルドイン_StaticFiles Middleware
_を使用します。 Configureメソッドのapp.UseStaticFiles();
でアクティブ化し、静的ファイルをwwwrootディレクトリに配置します。 Host/yourStaticFileで利用できます
詳細については、 ここ を参照してください
内部public void Configure
追加
app.Map("/favicon.ico", delegate { });
ファビコンリクエストがルートハンドラーによって解析されることを許可し、ルートを最小限に抑えます。ミドルウェアの使用は避けてください。これにより、コードがさらに複雑になり、他のすべてのリクエストはルートハンドラーの前にミドルウェアを通過する必要があります。忙しくないWebサイトの場合、これについて心配するだけで時間を無駄にすることになります。
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" });