首页 > 解决方案 > 带有友好路由的 Razor 页面路由没有响应

问题描述

关注https://www.learnrazorpages.com/razor-pages/routing和“友好路线”

使用此文件夹结构:

~Pages / (or "Areas" in last example)
External
      PageA
          Index.cshtml
Internal
      PageB
          Index.cshtml

然后我想添加这些路线

services.AddMvc()
.AddRazorPages(options =>
{
    // Even though above guide states this route it...
    // throws exception for "External/PageA" so I have to set "/External/PageA"
    options.Conventions.AddPageRoute("External/PageA", "/A"); 
    // throws exception for "External/PageB" so I have to set "/External/PageB" 
    options.Conventions.AddPageRoute("Internal/PageB", "/B");
});

但我得到的只是 404 未找到。我尝试了多种组合。我什至遵循了区域设置并将其移动到区域文件夹内具有相同结构的区域:

services.AddMvc()
.AddRazorPages(options =>
{
    options.AllowAreas = true;
    // Also tried "PageA" and "/PageA", "A" and "/A"
    options.Conventions.AddAreaPageRoute("External", "/PageA", "/A");
    // Also tried "PageB" and "/PageB", "B" and "/B"
    options.Conventions.AddAreaPageRoute("Internal", "/PageB", "/B");
});

更像是整个会议设置被完全忽略了,因为进展为 0%。

我可以访问该页面的唯一方法是编写完整的文件夹名称。但我不想要这个。我想要一个比目前似乎不可能的文件夹结构更干净的路由结构。

任何建议 - 任何想法?

标签: razorroutingrazor-pages

解决方案


从您链接到的页面:

[AddPageRoute] 方法有两个参数。第一个是不带扩展名的 Razor 页面文件的相对路径

您正在提供包含该页面的文件夹的路径。您需要将“/Index”添加到第一个参数的末尾:

options.Conventions.AddPageRoute("/External/PageA/Index", "A");

处理区域时也是如此。您需要提供实际页面的相对路径,而不是文件夹名称:

options.Conventions.AddAreaPageRoute("External", "/PageA/Index", "/A");

这假设结构如下:

Areas External Pages PageA Index.cshtml


推荐阅读