【问题标题】:favicon.ico not found when using Areas in ASP.NET Core在 ASP.NET Core 中使用区域时找不到 favicon.ico
【发布时间】:2020-07-15 22:40:57
【问题描述】:

当我添加“区域”路由映射时,浏览器对 wwwroot 文件夹根目录中的 /favicon.ico 的请求返回错误:“未找到视图'索引'。搜索了以下位置:/区域/favicon.ico/Views/Home/Index.cshtml"

在添加“区域”端点路由映射之前没有错误。

    app.UseAuthentication();
    app.UseStatusCodePages();
    app.UseRouting();
    app.UseAuthorization();
    app.UseStaticFiles();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "areas",
            pattern: "{area}/{controller=Home}/{action=Index}/{id?}");

        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });

看起来路由引擎将 favicon.ico 混淆为控制器。知道如何解决这个问题吗?

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    您应该将UseStaticFiles() 移到UseRouting() 调用之上。

    由于中间件是从上到下执行的,因此在您的情况下首先调用 UseRouting。当UseRouting 中间件执行时,它会根据您传递给UseEndpoints 的端点映射来确定要调用的路由。因此,它会看到路由 /favicon.ico 并尝试将其与您的 MVC 路由之一匹配,最终选择 favicon.ico 作为区域的名称(因此完整的路由将是 /favicon.ico/Home/Index。为此,ASP.NET Core显然找不到匹配的视图。

    但您想要做的是首先执行静态文件中间件,以便它在尝试将剩余路由解析为 MVC 路由之前为它可以找到的所有静态文件提供服务。 p>

    所以只需移动UseStaticFiles() 调用:

    app.UseStatusCodePages();
    app.UseStaticFiles();
    
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "areas",
            pattern: "{area}/{controller=Home}/{action=Index}/{id?}");
    
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
    

    您可能还想在身份验证之前移动静态文件,以确保所有用户也可以访问您的静态文件。

    【讨论】:

      猜你喜欢
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多