您好,我目前正在与Razor Page一起玩,想问一下是否有可能实际上不允许直接访问索引页。
即我有多个文件夹:
现在,我想允许人们通过/Search
和/Document
访问它们,但是如果有人直接呼叫/Search/Index
,则应该将他默认为“默认” 404处理程序,这可能吗?
答案 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(这不太可能会发生,但是值得一提)。