gpt4 book ai didi

asp.net-core - Hook 到 ASP.Net Core 的 Razor 页面执行

转载 作者:行者123 更新时间:2023-12-04 16:30:50 26 4
gpt4 key购买 nike

我正在尝试连接到 ExecuteAsync() 调用,该调用使用我的 CUSTOM View 页面(继承自 RazorPage)呈现 Razor 页面。在 RazorPage 类中有这个抽象方法:

public abstract Task ExecuteAsync();

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

显然,我不能只覆盖它,因为我的 View 永远不会从生成的 View 中调用,这也覆盖了这个方法(尽管那样很好,至少可以解决部分问题)。

.Net core 中是否有任何特殊的 Razor 技巧,我可以在渲染过程之后的 AND 之前进行拦截? (使用我的自定义类)

最佳答案

好的,看来您必须使用 ViewResultExecutor。在深入研究代码后,我发现执行程序用于调用嵌套 ExecuteAsync 调用链中的第一个 ExecuteAsync()。 ;)

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

ViewResultExecutor服务对象在ViewResult.ExecuteResultAsync(ActionContext context)中获取。

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

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

更新:自最初发布以来,此流程已更改。这是注册你自己的执行者的新方法:

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

请注意 TryAdd 部分。这意味着它不会添加它,如果它已经存在。这与 MVC 代码尝试做的事情相同,因此您必须在 MVC 之前先注册您的代码。此外,如果从 ViewResultExecutor(而不是它实现的接口(interface))派生,则 {ViewResultExecutor}.ExecuteAsync(...) 签名已更改并且不能再被覆盖。您现在只能重写基本 {ViewExecutor}.ExecuteAsync(...) 方法。

关于asp.net-core - Hook 到 ASP.Net Core 的 Razor 页面执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43267839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com