Visual Studio 如何在ASP.NET Razor中MapURL以遵循文件夹方案

ldioqlga  于 2023-02-09  发布在  .NET
关注(0)|答案(1)|浏览(104)

我有这样的文件夹布局:

Pages
|
|- index.cshtml
|- products.cshtml
|- products
           |
           |- product1.cshtml
           |- product2.cshtml
|- settings.cshtml

根文件夹工作正常(index.cshtmlproducts.cshtmlsettings.cshtml),URLMap正常,例如products.cshtml将Map到https://example.com/products
我希望Pages文件夹的products子文件夹中的.cshtml文件也像这样Map。例如,product1.cshtmlMap到URL https://example.com/products/product1等。
目前,在每个产品文件中,我有@page "/products/product1",我不知道这是否是正确的方式,它似乎一半的工作,但有奇怪的行为,如果有一个尾随/的URL结束,CSS没有加载等。

9jyewag0

9jyewag01#

您可以使用自定义的Page路由操作约定来实现这一点。
示例代码如下所示:

services.AddRazorPages(options =>
                {
                    options.Conventions.AddPageRoute("/products/product1", " product1");
                    options.Conventions.AddPageRoute("/products/ product2", " product2");
                    options.Conventions.AddFolderRouteModelConvention("/", model =>
                    {
                        var selectorCount = model.Selectors.Count;
                        for (var i = selectorCount - 1; i >= 0; i--)
                        {
                            var selectorTemplate = model.Selectors[i].AttributeRouteModel.Template;
 
                            if (selectorTemplate.StartsWith("products")) 
                                model.Selectors.RemoveAt(i);
                        }
                    });
                });

相关问题