我是 Razor 引擎的新手,只是有一个关于在 ASP.NET MVC 中生成响应的问题首先我们知道视图引擎的作用就是将对视图的请求转化为ViewEngineResult对象,而Razor视图引擎实现了IViewEnginepublic interface IViewEngine{ ViewEngineResult FindView(ActionContext context, string viewName, bool isMainPage); ViewEngineResult GetView(string executingFilePath, string viewPath, bool isMainPage);}在FindVieworGetView方法中,Razor 引擎返回一个ViewEngineResult对象:// pseudo code for simplificationif view_found return ViewEngineResult.Found(viewName, new RazorView(...));实现为RazorView:IViewpublic class RazorView : IView{ public string Path { get; } public virtual Task RenderAsync(ViewContext context);}函数RenderAsync似乎是产生响应的人。但是 .cshtml 文件也会被 Razor 引擎编译成 C# 类,下面是生成 index.cshtml 的 C# 代码的示例:public class ASPV_Views_Home_Index_cshtml : RazorPage<string[]> { ... public override async Task ExecuteAsync() { ...//this method also seems to generate response }}所以ExecuteAsync似乎也产生了反应最后,如果我们查看ViewResult操作方法返回的对象,则ViewResult实现ActionResult(implements IActionResult) 为public class ViewResult : ActionResult{ ... public override Task ExecuteResultAsync(ActionContext context); }ExecuteResultAsync似乎也产生了反应。所以我们有三个候选人1-RazorView.RenderAsync()2-RazorPage.ExecuteAsync()3-ViewResult.ExecuteResultAsync()哪一个是真正产生响应的?
1 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
ExecuteResultAsync
根据结果的类型(ViewResult
、PageResult
、ContentResult
、JsonResult
等)进行不同的处理。对于ViewResult
,其主要职责是设置HttpResponse
对象属性(StatusCode
、ContentType
、Body
等)。
内部ExecuteResultAsync
调用RenderAsync
负责渲染视图及其布局。
再次,内部RenderAsync
调用ExecuteAsync
. ExecuteAsync
razor 语法的实际渲染是什么。
您可以下载 .NET Core 存储库AspNetCore并检查所有内容如何在命名空间下连接的详细信息Microsoft.AspNetCore.Mvc
。
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消