将 Service Fabric .NET Core 3.1 应用程序迁移到 .NET 6 导致 UI 渲染 404

问题描述 投票:0回答:1

我最近一直在尝试迁移现有的 Service Fabric .NET Core 3.1 应用程序,该应用程序具有 Web API 项目MVC UI 项目、几个 类库 以及关联的 测试项目

我一直在关注 Microsoft 文档 从 ASP.NET Core 3.1 迁移到 6.0 并将“更新目标框架”、“更新包引用”步骤应用于此应用程序中的所有项目,因为这些是唯一相关的步骤对于我的应用程序,修复了所有编译错误/警告,现在已成功构建。

我已成功运行该应用程序并通过邮递员测试了 Web API 项目,并且可以验证一切正常,即我可以点击 enpoint 并获得响应。

然后我尝试通过 https://localhost:30000/ 访问本地 UI 环境,但这会立即出现

404
错误

我的

Startup.cs
Program.cs
文件在受影响的 UI
 项目中尚未从 .NET core 3.1 更改为 .NET 6

默认路由已配置。

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

但它正在渲染

404

我不太清楚为什么在配置了默认路由的情况下点击上面的 URL 不会加载主页。

我可能完全错了,但我的假设是在 Service Fabric 上,因为我相信有些东西已经发生了变化,但我认为这方面的文档相当糟糕。

其他信息

.NET SDK 已本地安装在我的计算机上:

  • 3.1.423
  • 6.0.402

本地安装的Service Fabric开发套件:

  • 9.0.1107.9590(运行时版本)
  • 6.0.1107.9590(SDK版本)

任何帮助将不胜感激


这里是UI项目包参考:

<ItemGroup>
        <PackageReference Include="Ardalis.GuardClauses" Version="4.0.1" />
        <PackageReference Include="AutoMapper" Version="12.0.0" />
        <PackageReference Include="BuildBundlerMinifier" Version="3.2.449" />
        <PackageReference Include="Microsoft.AspNetCore.Authentication.AzureAD.UI" Version="6.0.10" />
        <PackageReference Include="Microsoft.AspNetCore.DataProtection.Extensions" Version="6.0.10" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.10" />
        <PackageReference Include="Microsoft.Extensions.Caching.SqlServer" Version="6.0.10" />
        <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.1" />
        <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="6.0.0" />
        <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.10" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.10" />
        <PackageReference Include="Microsoft.Identity.Client" Version="4.47.2" />
        <PackageReference Include="Microsoft.Identity.Web" Version="1.25.5" />
        <PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="1.25.5" />
        <PackageReference Include="Microsoft.Identity.Web.UI" Version="1.25.5" />
        <PackageReference Include="Microsoft.ServiceFabric.AspNetCore.Kestrel" Version="6.0.1107" />
        <PackageReference Include="Microsoft.ServiceFabric.AspNetCore.Configuration" Version="6.0.1107" />
        <PackageReference Include="Microsoft.ServiceFabric.Services" Version="6.0.1107" />
        <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.2.0" />
        <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.10" />
        <PackageReference Include="Microsoft.Web.LibraryManager.Build" Version="2.1.175" />
    </ItemGroup>
c# .net-core asp.net-core-mvc .net-6.0 azure-service-fabric
1个回答
0
投票

从 .NET Core 3.1 迁移到 .NET 6 时,发生了一些更改和改进,包括 MVC 视图和控制器的发现和配置方式的更改。

在 .NET 6 中,应用程序部件功能得到了增强,它允许 MVC 从主应用程序集之外的其他来源发现控制器和视图。

在.NET Core的早期版本(例如3.1)中,默认情况下会从主应用程序集中自动发现MVC控制器和视图。但是,在 .NET 6 中,可能存在控制器或视图位于单独的程序集或动态加载的程序集中的情况,MVC 可能无法自动发现它们。

将程序集显式添加为应用程序部件可确保 MVC 知道在该程序集中查找控制器和视图,即使在控制器和视图不在主应用程序程序集中的情况下也能实现正确的功能。

因此,在从 .NET Core 3.1 到 .NET 6 的迁移过程中,显式添加程序集作为应用程序部分可确保 MVC 通过从指定程序集中发现控制器和视图来继续正常工作。这确保了与 .NET 6 中引入的新功能和增强功能的兼容性和功能。

鉴于上述情况,为了解决我的问题,我将以下代码片段添加到我的 UI 启动文件中

var assembly = typeof(HomeController).Assembly;
services.AddControllersWithViews().AddNewtonsoftJson().PartManager.ApplicationParts.Add(new Microsoft.AspNetCore.Mvc.ApplicationParts.AssemblyPart(assembly));

添加上述内容后,我能够成功点击并导航到用户界面中的不同页面

© www.soinside.com 2019 - 2024. All rights reserved.