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
的所有页面(这不太可能重要,但值得一提)。
您好,目前我正在玩 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
的所有页面(这不太可能重要,但值得一提)。