Проблемы с маршрутизацией в ядре. NET после обновления - PullRequest
0 голосов
/ 06 апреля 2020

Я обновил решение с 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 core.

  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", "")));
                }
            });


Я получаю сообщение об ошибке, что он пытался найти это действие, но не смог найти, а затем список страниц, где он искал конкретное действие. Что указывает на то, что он не смотрел в контроллере других проектов.

1 Ответ

0 голосов
/ 09 апреля 2020

Сейчас работает. Я добавил следующие строки кода.

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

Это решило проблему и добавило библиотеки других проектов, и теперь оно направляется на контроллеры других проектов.

...