Razor Pages 路由技术

Razor Pages routing techniques

我是 razor 页面的新手(习惯了 MVC 模式)。我在 GitHub:

上发现了一些有趣的路由模式
services.AddMvc()
    .AddViewLocalization()
    .AddDataAnnotationsLocalization()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AddPageRoute("/Edit", "/{Slug}/Edit");
        options.Conventions.AddPageRoute("/Delete", "{Slug}/Delete");
        options.Conventions.AddPageRoute("/Details", "{Slug?}");
        options.Conventions.AddPageRoute("/Details", @"Index");
        options.Conventions.AddPageRoute("/Create", "{Slug?}/Create");
    });

在某些项目中,我没有看到 AddRazorPagesOption

出于好奇,如果我不这样指定路由会怎样?

方法options.Conventions.AddPageRoute 只是帮助您为页面定义自定义路由。所以,剃刀页面:

  1. Edit 将具有路由模板 /{Slug}/Edit,其中 Slug 是来自 URL.
  2. 的参数
  3. Delete 将具有路由模板 /{Slug}/Delete,其中 Slug 是来自 URL.
  4. 的参数
  5. Details 将具有路由模板 /{Slug?},其中 Slug 是来自 URL 的 可选 参数。您也可以使用 /Index 转到该页面。
  6. Create 将具有路由模板 /{Slug?}/Create,其中 Slug 是来自 URL.
  7. 的可选参数

如果您删除它们,您的所有剃须刀页面将只使用默认约定,即文件夹基本约定以 Pages 文件夹作为根文件夹开始。对于具有参数的页面,您应该在请求中将它们作为查询参数传递 URL。例如,如果没有定义约定,如果您想转到 myValue 项目的 Edit 页面,则必须使用 /Edit?slug=myValue。配置约定后,URL 很漂亮,因为您将使用 /myValue/Edit.

我认为您实际拥有的配置只是为了避免将剃刀页面的参数作为请求中的查询参数传递 URL。