C# Razor 页面禁用文件夹的所有 /Index 路由?

C# Razor Page disable all /Index Route for Folders?

您好,目前我正在玩 Razor Page,想问一下,是否有可能实际上不允许直接访问索引页。

即我有多个文件夹:

现在我想允许人们通过 /Search/Document 访问它们,但是如果有人直接调用 /Search/Index,他应该被默认为 "default" 404 处理程序,这可能吗?

您可以通过自定义实现此目的 Page route action convention。约定允许您在页面、区域或文件夹级别自定义应用于页面的路由。要自定义所有 页面的路由,您可以使用/ 的文件夹。以下是如何删除 Index 路由的示例:

services
    .AddMvc()
    .AddRazorPagesOptions(options =>
    {
        options.Conventions.AddFolderRouteModelConvention("/", model =>
        {
            var selectorCount = model.Selectors.Count;

            // Go down in reverse order to simplify removing from a list that's being iterated.
            for (var i = selectorCount - 1; i >= 0; i--)
            {
                var selectorTemplate = model.Selectors[i].AttributeRouteModel.Template;

                if (selectorTemplate.EndsWith("Index")) // Perhaps be more specific here.
                    model.Selectors.RemoveAt(i);
            }
        });
    });

请注意,对于位于根目录的索引页面,要删除的选择器是 Index(而不是 /Index),而对于您的其他选择器,它是 Page/Index。我在示例中保持简单,但这也会删除名称中包含 Index 的所有页面(这不太可能重要,但值得一提)。