我是 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 關注
- 130 瀏覽
添加回答
舉報
0/150
提交
取消