我们知道 Razor View 引擎转换 ViewResult
( IActionResult
) 到可以发送给用户的 HTML 响应。下面是关于过滤器管道的图片:
我的问题是,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/