首页 > 解决方案 > 如何从 ASP.Net Core 5 (Razor) 中的中间件获取页面模型的类型?

问题描述

我正在尝试编写一个仅适用于在 Model 类上没有[AllowAnonymous]属性的 Razor 页面的中间件。但是要实现这一点,我必须以某种方式通过HttpContext对象从中间件中找出页面模型的类型。我不确定这种类型的信息是否存在,因为中间件在 Razor Page 之前运行,所以可能还没有从路径解析端点。

我试过在context.Features.Get<IEndpointFeature>()?.Endpoint课堂上偷看,但我找不到任何关于端点类型的有用信息。

我也考虑过过滤器,但我正在修改一个使用中间件实现许多检查的现有项目,如果可以的话,我想避免将它们重写为IActionFilters。

标签: asp.net-corerazor-pages.net-5

解决方案


您可以使用如下中间件:

app.UseRouting();           
app.UseAuthentication();
app.UseAuthorization();

app.Use(async (context, next) =>
{
    var endpoint = context.GetEndpoint();
    //endpoint declares with AllowAnonymous attribute
    if (endpoint?.Metadata?.GetMetadata<IAllowAnonymous>() is object)
    {
        //do your stuff...
    }
    await next.Invoke();
});
app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
});

推荐阅读