挂钩 ASP.Net Core 的 Razor 页面执行

2023-11-29

我正在尝试加入ExecuteAsync()使用我的自定义视图页面(继承自RazorPage)。在里面RazorPage类中有一个抽象方法:

public abstract Task ExecuteAsync();

解析 .cshtml 文件(视图)时,该方法在 razor 生成的输出中被调用。

显然,我不能只是重写它,因为我的视图永远不会从生成的视图中调用,这也会重写此方法(尽管这很好,并且至少解决了部分问题)。

.Net core中有没有什么特殊的剃刀技巧可以让我拦截AND渲染过程之后? (使用我的自定义类)


好吧,看起来你必须使用ViewResultExecutor。经过更多的代码探索后,我发现执行器被用来调用第一个ExecuteAsync()在嵌套链中ExecuteAsync来电。 ;)

public class MyViewResultExecutor : ViewResultExecutor
{
    ....
    public override Task ExecuteAsync(ActionContext actionContext, IView view, ViewResult viewResult) ....
    ....
}
....
services.TryAddSingleton<ViewResultExecutor, MyViewResultExecutor>();

The ViewResultExecutor服务对象获取于ViewResult.ExecuteResultAsync(ActionContext context).

很棒的是您还可以通过以下方式访问自定义页面类型view范围 ((view as RazorView)?.RazorPage)。 ;)(当然,您必须将其转换为您的自定义类型)

(我开始讨论here最初,如果有人有兴趣阅读有关 ASP.Net Core MVC 源方面的更多详细信息)

Update:自最初发布以来,此流程已发生变化。这是注册您自己的执行器的新方法:

services.TryAddSingleton<IActionResultExecutor<ViewResult>, MyViewResultExecutor>();
// ... or ...
services.TryAddSingleton<IActionResultExecutor<PartialViewResult>, MyPartialViewResultExecutor>();

请注意TryAdd部分。这意味着如果它已经存在,它将不会添加它。这与 MVC 代码尝试执行的操作相同,因此您必须在 MVC 之前先注册您的代码。另外,如果源自ViewResultExecutor(而不是它实现的接口){ViewResultExecutor}.ExecuteAsync(...)签名已更改且无法再被覆盖。您只能覆盖基础{ViewExecutor}.ExecuteAsync(...)现在的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

挂钩 ASP.Net Core 的 Razor 页面执行 的相关文章

随机推荐

  • 借用亲子关系检查器

    我有下面的代码生成在其注释中标记的错误消息 我想我理解这个消息 我想借用父级两次 一次用于查找其子级 一次作为子级的参数 并且错误中的可变 不可变单词不相关 我必须证明这一点Child修改后不会消失Parent 但我不知道该怎么做 我可以R
  • int 数据类型的服务器端验证

    我制作了自定义验证器属性 partial class DataTypeInt ValidationAttribute public DataTypeInt string resourceName base ErrorMessageResou
  • 这个使用 .sort() 打乱数组的 W3Schools 代码是如何工作的?

    这段代码片段来自w3schools JavaScript 部分 我想弄清楚什么 points sort function a b return 0 5 Math random 从下面的代码可以看出 我知道它试图对存储在称为点的数组中的数字执
  • 与 DataSnap 的 IPv6 连接

    在 WWDC 2015 上 Apple 宣布在 iOS 9 中过渡到仅 IPv6 网络服务 从 2016 年 6 月 1 日开始 提交到 App Store 的所有应用程序都必须支持仅 IPv6 网络 我的Delphi IOS应用程序有一个
  • 如何在Python中向输出文件添加新列?

    我用 Python 编写了这段代码 如何添加每行包含数字 1 的新列 qty 这是文件tripo 1 txt 2 txt 5 txt 4 txt 3 txt 6 txt 7 txt 8 txt 这是代码 with open test csv
  • SQL Getdate的精度?

    我正在试验一个程序 该程序可以高速将数据插入 SQL 2005 Server 数据库 在 XP SP3 上 这是为了收集时序数据 以便我可以评估设计的不同方面 我的基本设置包括将数据插入到如下表中 并使用仅指定有效负载字段的 SP crea
  • 错误:#1071 - 指定的密钥太长;最大密钥长度为 1000 字节 - mysql 5.0.91

    我使用的是 mysql 5 0 91 我需要保存 URL 有些很小 有些很长 我想用varchar 2000 但我收到错误 1071 指定的密钥太长 最大密钥长度为 1000 字节 使用 mysql 5 0 91 在我的主机上保存 URL
  • 在 Apache 的 Lucene 中使用默认和自定义停用词(奇怪的输出)

    我正在使用 Apache 的从字符串中删除停用词Lucene 8 6 3 和以下 Java 8 代码 private static final String CONTENTS contents final String text This
  • 基类具有不同初始化参数时的方法解析顺序

    我正在尝试理解 Python 中的 MRO 虽然这里有各种各样的帖子 但我并没有特别得到我想要的 考虑两个类A and B源自BaseClass 每个都有一个 init 采用不同的参数 class BaseClass object def
  • 产品方法重载

    所以我正在CodeHS上解决这个问题 然后我被困了很长时间所以决定在这里问 练习是重载 Product 方法以允许将其他类型的值相乘 两个双打 一个 int 和一个 double 一个 double 和一个 int 三个整数 三双 publ
  • 如何比较两个卷并列出修改的文件?

    我有2个硬盘卷 一个是另一个的备份映像 我想比较这些卷并列出所有修改的文件 以便用户可以选择他 她想要回滚的文件 目前 我正在递归新卷并将每个文件的时间戳与旧卷的文件进行比较 如果它们位于旧卷中 显然这是一种错误的做法 这既耗时又错误 有没
  • 2x 提交按钮来操作不同的 URL

    需要 jquery 的帮助来更改我的表单操作 具体取决于按下提交按钮 我找到了一些 javascript 代码 但它不起作用
  • java.lang.VerifyError:堆栈映射与异常句柄处的堆栈映射不匹配

    当我为 testcontroller 实现方面时 启动 springboot 应用程序时出现以下异常 org springframework beans factory BeanCreationException 错误 创建文件中定义的名为
  • HttpWebRequest 中的 http 参数值的大小是否有限制?

    我正在测试几个不同的公共 RESTful API 每个 API 的 http 参数值名称都不同 但在概念上 所有 API 的工作原理都是相似的 然而 这些公司都没有关联 所以这一定是我这边的事情 在 NET 中 尝试获取 HttpWebRe
  • 观察具有传递项目依赖关系的构建?

    您好 我对 C NET 相当陌生 我有一些关于项目依赖性的问题 第一 我的情况 我有一个解决方案 让我们称之为 MyLibrary 它有几个 dll 输出项目 这些项目相互依赖 作为项目引用 也依赖于一些外部库 dll 引用 我确保该项目引
  • 命令“grunt server”的指南针错误

    我正在运行一个安装了nodeJs ruby yeoman compass等的项目 现在我用命令运行我的项目 gt grunt server or gt grunt server force 但它给了我罗盘的以下错误 E CRM worksp
  • 在 MYSQL 中从文本框中的逗号分隔文本添加新行

    我有一个 PHP MYsql 问题 我试图在每个逗号后插入一个新行 基本上 我想要这个功能 假设我们有一个包含以下文本的文本框 篮球 网球 足球 排球 gt 提交按钮 单击提交按钮后 我想在一个表中的每个单词后插入一个新行 基本上 我希望数
  • 在 Eclipse 上测试时如何传递 -D System 属性?

    我正在 Windows 上的 Eclipse 上进行开发 代码部署在 Unix 上 我正在使用 System getProperty key 获取系统属性值 如何在 Eclipse 中传递它 以便我不必修改代码并且它可以在 Eclipse
  • Delphi IDE 中出现“无法更改 OnShow 或 OnHide 中的可见项”错误

    我在使用 Delphi 2006 IDE 时遇到一个非常奇怪的问题 如果 IDE 最小化 并且 PC 被锁定 我返回电脑 解锁并最大化 IDE 有时会收到错误 无法更改 OnShow 或 OnHide 中的可见项 如果发生这种情况 我必须使
  • 挂钩 ASP.Net Core 的 Razor 页面执行

    我正在尝试加入ExecuteAsync 使用我的自定义视图页面 继承自RazorPage 在里面RazorPage类中有一个抽象方法 public abstract Task ExecuteAsync 解析 cshtml 文件 视图 时 该