【问题标题】:Default route action not working after upgrade to ASP.NET Core MVC 2.2升级到 ASP.NET Core MVC 2.2 后默认路由操作不起作用
【发布时间】:2019-05-12 13:34:59
【问题描述】:

在将我的应用程序从 asp.net core 2.1 更新到 2.2 后,默认路由操作似乎不适用于位于单独类库中的控制器。

例如我有一个这样的默认路由:

routes.MapRoute(
            name: "default",
            template: "{controller}/{action}"
            ,defaults: new { controller = "Home", action = "index" }
            );

在我的类库中,我有一个控制器 SiteAdminController,它有一个 Index 操作方法。

当我访问 url /siteadmin 时,我得到 HomeController 索引,而不是 SiteAdminController 的索引操作

如果我使用 /siteadmin/index 那么它可以工作

如何在不要求在 url 中明确显示索引操作的情况下使其工作?它在 2.1 中运行良好

【问题讨论】:

  • 您使用的是 2.2 兼容级别吗? .AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)?还是旧的 2_1 兼容性? (它确定是否使用端点路由或 mvc 路由器中间件)。也可以通过MvcOptionEnableEndpointRouting属性单独禁用
  • 是 2.2 兼容性和进程托管
  • 更改为 2.1 兼容性确实可以解决问题,但我希望它与 2.2 兼容
  • 在尝试在新解决方案中复制此问题时遇到问题,无法弄清楚我的主要解决方案中可能导致此问题的不同之处。
  • 奇怪的是,除了 cloudscribe 核心的主要开发解决方案之外,我似乎无法在其他解决方案中重现这一点。如果有人想帮助解决这个问题,repo 在这里:github.com/cloudscribe/cloudscribe 请注意,即使是使用我们的项目模板和使用我们的 nugets 创建的新项目,在升级到 netcoreapp2.2 时也可以正常工作。目前我很困惑为什么会出现这个问题。

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

您是否尝试过在模板中设置默认值?

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

这在 Core 2.2 中对我有用

【讨论】:

  • 我的意思是在模板中的字面意思,而不是“默认值:新控制器 = ..”如果我尝试,后者不起作用。在模板中定义它。
猜你喜欢
  • 2019-06-11
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多