检查是否向 Razor 页面发出请求
Check if request is made to Razor Page
如果当前请求是针对 Razor 页面而不是任何其他资源(静态文件或 API)发出的,我如何在中间件代码中检查?
我所有的 API 都位于 api
文件夹中,因此 if (!context.Request.Path.StartsWithSegments("/api")) {}
过滤掉了 API,但这不适用于静态内容,因为这些文件和库放置在多个文件夹中,导致 URL 个段数。
在 context
中找不到任何相关的 属性。
第一步 - 将中间件放在 app.UseRouting()
之后。任何对静态文件的请求都不会到达您的中间件,因为静态文件中间件会使请求短路。此外,在这一点之后,路由中间件将选择端点并填充端点元数据。然后您可以测试端点元数据集合以查看它是否包含 PageRouteMetaData
,它告诉您这是一个 Razor 页面路由:
app.Use((context, next) => {
var endpoint = context.GetEndpoint();
if (endpoint != null)
{
foreach(var md in endpoint.Metadata)
{
if( md is PageRouteMetadata)
{
// this is a page route
}
}
}
return next(context);
});
如果当前请求是针对 Razor 页面而不是任何其他资源(静态文件或 API)发出的,我如何在中间件代码中检查?
我所有的 API 都位于 api
文件夹中,因此 if (!context.Request.Path.StartsWithSegments("/api")) {}
过滤掉了 API,但这不适用于静态内容,因为这些文件和库放置在多个文件夹中,导致 URL 个段数。
在 context
中找不到任何相关的 属性。
第一步 - 将中间件放在 app.UseRouting()
之后。任何对静态文件的请求都不会到达您的中间件,因为静态文件中间件会使请求短路。此外,在这一点之后,路由中间件将选择端点并填充端点元数据。然后您可以测试端点元数据集合以查看它是否包含 PageRouteMetaData
,它告诉您这是一个 Razor 页面路由:
app.Use((context, next) => {
var endpoint = context.GetEndpoint();
if (endpoint != null)
{
foreach(var md in endpoint.Metadata)
{
if( md is PageRouteMetadata)
{
// this is a page route
}
}
}
return next(context);
});