将路由参数添加到一个区域中的所有 Razor 页面

Add Route Parameter to all Razor Pages in an Area

我正在尝试将路由参数添加到 Razor 页面区域中的所有页面,以便区域中的每个 URL 都有一个 OrgId,例如/dashboard/{orgId}/{page}/{route}。我可以使用 AddAreaPageRoute 添加它们,如下所示,但我不禁觉得有一种方法可以将它应用到所有页面,而不必为区域中的每个页面定义一个条目。有没有办法为一个区域中的所有页面创建一个路由?

.AddRazorPages(options =>
{
    options.Conventions.AddAreaPageRoute("Dashboard", "/Index", "Dashboard/{orgId}");
    options.Conventions.AddAreaPageRoute("Dashboard", "/AddItem", "Dashboard/{orgId}/AddItem");
    options.Conventions.AddAreaPageRoute("Dashboard", "/Items", "Dashboard/{orgId}/Items");
    options.Conventions.AddAreaPageRoute("Dashboard", "/Items/Index", "Dashboard/{orgId}/Items/{id}");
})

您可以像下面这样更改您的代码:

services.AddRazorPages(options =>
        {
            options.Conventions.AddAreaFolderRouteModelConvention("Dashboard", "/", model =>
            {
                foreach (var selector in model.Selectors)
                {
                    var c = selector.AttributeRouteModel.Template.ToString();
                    selector.AttributeRouteModel = new AttributeRouteModel
                    {
                        Order = -1,
                        Template =c.Replace("Dashboard", "Dashboard/{orgId}")

                    };
                }
            });
         });

您可以在doc中查看详细信息。