asp.net-core - 检查是否向 Razor 页面发出请求

标签 asp.net-core middleware razor-pages

如果当前请求是针对 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);
});

关于asp.net-core - 检查是否向 Razor 页面发出请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72178486/

相关文章:

c# - 身份验证异常 : AuthenticationMechanismTooWeak: 5. 7.14

node.js - 用于多部分 Nodejs 的 Bodyparser

razor - 在cshtml文件中的C# block 代码之间插入html标签

c# - ViewContext.RouteData.Values ["Controller"]始终为空-Asp.Net Core 2.1

c++ - Protocol Buffer 和实际传输选项 - 套接字或中间件

asp.net-mvc - 在 web.config 文件中全局验证文本框控件的 html 标记输入

c# - 类库和 ASP.NETvNext 类库的区别?

ssl - 调试在 IIS 中运行的 ASP.NET Core 应用程序

c# - 使用 ASP.NET Core 3.1,如何从页面 URL 中剥离 Home Controller ?

php - 如何将 URL 参数从路由传递到中间件?