【问题标题】:Why wrong routes are getting applied in ASP.NET CORE MVC?为什么在 ASP.NET CORE MVC 中应用了错误的路由?
【发布时间】:2018-07-19 11:06:18
【问题描述】:

我正在开发 ASP.NET CORE MVC 项目。其中有 2 条路线:

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

    routes.MapRoute(
       name: "news",
       template: "News{controller}/{action}");
});

我注意到在 CORE 2.0 框架中定义特定的概念 最初的路线不适用于我上面显示的 2 条路线。有错误吗?还是我的代码有问题?


当获取 URL - '/NewsHome/Index' 时,它正在调用 Home Controller Action 方法。

它应该实际调用 NewsHome 控制器的 Index 方法。怎么了?

我还提供了本书的摘录 - 'Pro ASP.NET Core MVC 2 by 亚当弗里曼'来说明我的观点。请看下面:

有什么问题,请指导一下?

【问题讨论】:

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


    【解决方案1】:

    答案在您发布的屏幕截图中。您应该颠倒映射的顺序。在屏幕截图中,它显示了它是如何出错的。

    【讨论】:

    • 我的问题是,如果路线的顺序与我发布的相同,那么 url '/NewsHome/Index' 应该调用 'NewsHome' 控制器(基于第一条路线)。但事实并非如此。它实际上是在应用第二条路由时调用“Home”控制器。为什么?
    • 你有实际控制人,叫“NewsHome”吗?
    【解决方案2】:

    它的行为与书中解释的完全一样。只需颠倒路线的顺序即可。

    【讨论】:

    • 我不想改变路线的顺序。整个问题是关于错误的路线被调用。
    • 如果我没记错的话,正确的路由会被调用:“那么第一个路由,它与任何带有零、一个或两个段的 URL 匹配,总是会被使用”这个'/NewsHome/Index' 是一个两段 URL,然后它调用您的第一个路由。所以“因此,必须首先定义最具体的路线。”
    【解决方案3】:

    改变

    routes.MapRoute(
       name: "news",
       template: "News{controller}/{action}");
    

    routes.MapRoute(
       name: "news",
       template: "/news/{action}");
    

    【讨论】:

    • 我不是那个意思。我的路线是正确的,但我认为 asp.net 核心的行为不同。
    猜你喜欢
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    相关资源
    最近更新 更多