路由覆盖在 asp.net core 3.1 剃须刀页面中不起作用

Posted

技术标签:

【中文标题】路由覆盖在 asp.net core 3.1 剃须刀页面中不起作用【英文标题】:Route Override not working in asp.net core 3.1 razor pages 【发布时间】:2020-07-15 05:44:16 【问题描述】:

我正在使用Asp.Net Core 3.1 Razor pages。我需要覆盖我所在区域的其中一个页面的路线。

我的Area - Blog 中有Home 页面,当前路线是localhost/blog/home。我需要将其更改为localhost/blog。我在同一个博客区域中有一个Index 页面,但它有一个路由参数。所以它将是localhost/blog/my-blog-name。而且这不会干扰localhost/blog

我在ConfigureServices中添加了startup.cs中的设置

services
    .AddRazorPagesOptions(options => 
    
        options.Conventions.AddAreaPageRoute("Blog", "/", "/blog/home");
    );

这是我的文件夹结构,

但是当我导航到localhost/blog 时,我得到一个404 未找到。请帮忙看看我哪里错了。

【问题讨论】:

【参考方案1】:

我的Area - Blog 中有主页,当前路线是localhost/blog/home。我需要将其更改为localhost/blog。我在同一个博客区域有一个Index 页面,但它有一个路由参数。

当我导航到本地主机/博客时,我得到一个 404 未找到。

如果你查看AddAreaPageRoute method的定义,你会发现它带有区域名称、页面名称和路由模板,如下所示。

.AddAreaPageRoute("area_name_here", "page_name_here", "route_here")

根据您的要求和代码,我们可以发现您没有正确配置到页面的指定路由,并且如果您的博客区域的Index页面接受了必需的(非可选)路由参数,则会导致404错误当你浏览localhost/blog时。

要解决问题并达到要求,您可以尝试修改如下代码。

services.AddRazorPages()
    .AddRazorPagesOptions(
        options =>
        
            options.Conventions.AddAreaPageRoute("Blog", "/home", "/blog");
        
    );

测试结果

【讨论】:

以上是关于路由覆盖在 asp.net core 3.1 剃须刀页面中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 3.1 Razor 页面路由不明确匹配异常

如何将两个数组作为 POST 请求参数从 AJAX 发送到 MVC 控制器(ASP .NET Core 3.1 剃须刀)?

Asp.net Core 3.1-如何从控制器返回到 Razor 页面?

在剃须刀页面应用程序中路由到 ApiController?

Asp.net core 3.1 中的路由

当 url 的一部分已经是另一个路由时,ASP.NET Core 3.1 中的动态路由