好的,我们肯定知道的是ViewResult类的ExecuteResult方法调用了视图引擎。
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() 的方法,您可以将调试断点放置在它们两者上。这两个方法的调用顺序应该会给你答案。