asp.net-core - Razor Pages 路由技术

标签 asp.net-core routes razor-pages

我是 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只是帮助您为页面定义自定义路由。所以, Razor 页面:

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

如果您删除它们,您的所有 razor 页面将仅使用默认约定,即以 Pages 文件夹作为根文件夹启动的文件夹基本约定。对于具有参数的页面,您应该将它们作为请求 URL 中的查询参数传递。例如,如果没有定义约定,如果您想转到 myValueEdit 页面,则必须使用 /Edit?slug=myValue元素。配置好约定后,URL 就很漂亮了,因为您将使用 /myValue/Edit

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

关于asp.net-core - Razor Pages 路由技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51051341/

相关文章:

resources - Symfony2 中的路由

php - 重命名后 Laravel 方法不存在

c# - Asp.NET Core 自定义 Input Tag Helper 呈现重复的复选框

mysql - 'DbContextOptionsBuilder' 不包含 'UseSqlServer' 的定义

asp.net - Azure AD 不记名 token - 获取用户标识符

c# - 在 _Layout 中注入(inject) IOptions<T> 的最佳方法是什么

razor-pages - ASP.NET Core 3.1 Razor 页面 : How to automatically redirect to Login page from Index page?

c# - 如何在自定义 ModelBinder 中从 body 获取数据?

javascript - 如果满足条件则重新路由用户

asp.net-core - 有没有办法使用 Razor Pages 进行动态路由?