如何从 Core 5 (Razor) 中的中间件获取页面模型的类型 ASP.Net?



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

我试着窥视context.Features.Get<IEndpointFeature>()?.Endpoint类内部,但我没能找到关于端点类型的任何有用信息。

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

您可以像下面这样使用中间件:

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();
});

最新更新