检查是否向 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);
});