.NET core 升级后的路由问题

Routing Issues in .NET core After Upgrade

我已将解决方案从 2.2 升级到 3.1。在 2.2 中一切都 运行 顺利。升级后,我遇到了路由问题。

无法路由到解决方案中不同项目的控制器。

对于 2.2,我使用的是

 app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "areaRoute",
                    template: "{area:exists}/{controller=Home}/{action=Index}");

                routes.MapRoute(
                    name: "default",
                    template: "{controller=Account}/{action=Login}/{id?}");

            });

我尝试将其更改为

app.UseRouting();

 app.UseEndpoints(endpoints =>
            {
                endpoints.MapAreaControllerRoute(
                    name: "Quote",
                    areaName: "Quote",
                    pattern: "Quote/{controller=Home}/{action=Index}/{id?}");


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

                endpoints.MapRazorPages();
                endpoints.MapControllers();
                endpoints.MapControllerRoute("default", "/{action}/{id?}", new { action = "Index", controller = "Home" });
            });

但这并没有帮助。我正在加载程序集,但似乎无法使用 3.1 版的 .NET 核心。

  var mvcBuilder = services.AddMvc(config =>
            {
                var policy = new AuthorizationPolicyBuilder()
                                 .RequireAuthenticatedUser()
                                 .Build();
                config.Filters.Add(new AuthorizeFilter(policy));
            });


 foreach (var assemblyPlugin in pluginsInfoList)
            {
                // Register controller from modules
                mvcBuilder.AddApplicationPart(assemblyPlugin.Assembly);
            }

            mvcBuilder.AddControllersAsServices();
            mvcBuilder.AddViewComponentsAsServices();


 services.Configure<RazorViewEngineOptions>(options =>
            {
                options.ViewLocationExpanders.Add(new SynapseCore.Services.ThemeControl.TenantViewLocationExpander());
                options.AreaViewLocationFormats.Add("/Areas/{2}/Views/{1}/{0}.cshtml");
                options.AreaViewLocationFormats.Add("/Areas/{2}/Views/Shared/{0}.cshtml");

            });

            services.Configure<MvcRazorRuntimeCompilationOptions>(options =>
            {


                foreach (PluginInfo ioptionPlugin in pluginsInfoList)
                {

                    options.FileProviders.Add(new EmbeddedFileProvider(
                        ioptionPlugin.Assembly,
                        baseNamespace: ioptionPlugin.Name.Replace(".dll", "")));
                }
            });


我收到错误消息,它试图查找该操作,但找不到后跟它查找特定操作的页面列表。这表明它没有查看其他项目的控制器。

现在可以使用了。我添加了以下代码行。

IMvcBuilder mvcBuilder = services.AddRazorPages(); mvcBuilder.AddRazorRuntimeCompilation();

这解决了问题并添加了其他项目的 dll,现在它正在路由到其他项目的控制器。