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

时间:2018-08-17 09:30:56

标签: c# .net-core razor-pages

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

即我有多个文件夹:

  • 文档
  • 搜索

现在,我想允许人们通过/Search/Document访问它们,但是如果有人直接呼叫/Search/Index,则应该将他默认为“默认” 404处理程序,这可能吗?

1 个答案:

答案 0 :(得分:1)

您可以使用自定义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的所有Pages(这不太可能会发生,但是值得一提)。