asp.net-core - 如何从 ASP.Net Core 5 (Razor) 中的中间件获取页面模型的类型?
问题描述
我正在尝试编写一个仅适用于在 Model 类上没有[AllowAnonymous]
属性的 Razor 页面的中间件。但是要实现这一点,我必须以某种方式通过HttpContext
对象从中间件中找出页面模型的类型。我不确定这种类型的信息是否存在,因为中间件在 Razor Page 之前运行,所以可能还没有从路径解析端点。
我试过在context.Features.Get<IEndpointFeature>()?.Endpoint
课堂上偷看,但我找不到任何关于端点类型的有用信息。
我也考虑过过滤器,但我正在修改一个使用中间件实现许多检查的现有项目,如果可以的话,我想避免将它们重写为IActionFilter
s。
解决方案
您可以使用如下中间件:
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();
});
推荐阅读
- amazon-web-services - 来自 aws 的 pinpoint 无法将我的 csv 标头识别为地址
- python - 从列表列表中设置值和变量
- apache - 可以将“添加日期”列添加到 Apache 目录列表中吗?
- javascript - ChromeExtension:在谷歌搜索上触发监听器
- raspberry-pi3 - 尝试在我的 Rasberry Pi b+ 上运行 Alexa 语音服务时未满足的依赖关系
- c++ - 为什么这个范围基于返回一个数字的语句太低?
- kibana - 如何使用 keycloak 设置 kibana 单点登录
- java - JavaFx ListView 在每个项目中设置工具提示
- c# - 在 Asp Net MVC 中持久显示表单提交失败的数据
- here-api - HERE 地图“选择视图” - 我们可以删除选项吗?