c# - Razor View 引擎何时将 IActionResult 转换为 HTML?

标签 c# .net asp.net-core asp.net-core-mvc razorengine

我们知道 Razor View 引擎转换 ViewResult ( IActionResult ) 到可以发送给用户的 HTML 响应。下面是关于过滤器管道的图片:
enter image description here
我的问题是,Razor View 引擎将在哪个阶段启动并执行 IActionResult到 HTML 转换,在端点完成执行之后还是在资源过滤器完成执行之后?

最佳答案

好的,我们肯定知道的是 ViewResult 类的 ExecuteResult 方法调用了 View 引擎。

public void ExecuteResult(ControllerContext context)
{
  if (string.IsNullOrEmpty(this.ViewName))
     ViewName = context.RouteData.GetRequiredString("action");
  var viewEngineResult = (ViewEngineResult) null;
  if (View == null)
  {
      viewEngineResult = this.FindView(context);
      View = viewEngineResult.View;
  }
  var output = context.HttpContext.Response.Output;
  View.Render(new ViewContext(context, this.View, this.ViewData, this.TempData, output), output);
  if (viewEngineResult == null)
     return;
  viewEngineResult.ViewEngine.ReleaseView(context, this.View);
}
所以从上面的代码我假设 HTML 渲染部分发生在这个方法中。
我们也知道 IResourceFilter 有两个方法(异步版本 IAsyncResultFilter):
void OnResourceExecuting(ResourceExecutingContext context)
void OnResourceExecuted(ResourceExecutedContext context)
第一个方法 OnResourceExecuting 在我们的 api 端点被调用之前执行。
[SimpleResourceFilter]
        public IActionResult Index()
        {
            return View();
        }
我们可以声称 ExecuteResult 将在 OnResourceExecuting 之后被调用。
要验证将首先调用 OnResourceExecuted() 或 ExecuteResult() 的方法,您可以将调试断点放在它们两个上。这两个方法的调用顺序应该会给你答案。

关于c# - Razor View 引擎何时将 IActionResult 转换为 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65226515/

相关文章:

c# - 对 sql server 进行多线程调用的有效方法?

c# - 发送附件 Amazon SES API 与 SMTP

c# 获取迭代器在字典中的位置

angular - 使用 Angular 4 和 Asp.Net Core 2 获取 ValidateAntiForgeryToken

asp.net-core - 如何重启 Hangfire 服务器,或停止它并启动一个新服务器,以更改它正在处理的队列?

javascript - 使用ajax和json保存数据

c# - 添加行时保持 TextBox 滚动位置

c# - 从托管或生成进程调用非托管代码

c# - 在 AutoCAD 中绘制表格

asp.net-core - Kubernetes 客户端库 AuthenticationException