【发布时间】:2020-07-18 08:57:36
【问题描述】:
我已将解决方案从 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", "")));
}
});
我收到它试图查找该操作但找不到的错误,然后是它查找特定操作的页面列表。这表明它没有查看其他项目的控制器。
【问题讨论】:
标签: asp.net-core .net-core asp.net-core-mvc asp.net-core-2.2 asp.net-routing