我是 Razor 引擎的新手,只是有一個(gè)關(guān)于在 ASP.NET MVC 中生成響應(yīng)的問(wèn)題首先我們知道視圖引擎的作用就是將對(duì)視圖的請(qǐng)求轉(zhuǎn)化為ViewEngineResult對(duì)象,而Razor視圖引擎實(shí)現(xiàn)了IViewEnginepublic interface IViewEngine{ ViewEngineResult FindView(ActionContext context, string viewName, bool isMainPage); ViewEngineResult GetView(string executingFilePath, string viewPath, bool isMainPage);}在FindVieworGetView方法中,Razor 引擎返回一個(gè)ViewEngineResult對(duì)象:// pseudo code for simplificationif view_found return ViewEngineResult.Found(viewName, new RazorView(...));實(shí)現(xiàn)為RazorView:IViewpublic class RazorView : IView{ public string Path { get; } public virtual Task RenderAsync(ViewContext context);}函數(shù)RenderAsync似乎是產(chǎn)生響應(yīng)的人。但是 .cshtml 文件也會(huì)被 Razor 引擎編譯成 C# 類(lèi),下面是生成 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似乎也產(chǎn)生了反應(yīng)最后,如果我們查看ViewResult操作方法返回的對(duì)象,則ViewResult實(shí)現(xiàn)ActionResult(implements IActionResult) 為public class ViewResult : ActionResult{ ... public override Task ExecuteResultAsync(ActionContext context); }ExecuteResultAsync似乎也產(chǎn)生了反應(yīng)。所以我們有三個(gè)候選人1-RazorView.RenderAsync()2-RazorPage.ExecuteAsync()3-ViewResult.ExecuteResultAsync()哪一個(gè)是真正產(chǎn)生響應(yīng)的?
1 回答

白衣染霜花
TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
ExecuteResultAsync
根據(jù)結(jié)果的類(lèi)型(ViewResult
、PageResult
、ContentResult
、JsonResult
等)進(jìn)行不同的處理。對(duì)于ViewResult
,其主要職責(zé)是設(shè)置HttpResponse
對(duì)象屬性(StatusCode
、ContentType
、Body
等)。
內(nèi)部ExecuteResultAsync
調(diào)用RenderAsync
負(fù)責(zé)渲染視圖及其布局。
再次,內(nèi)部RenderAsync
調(diào)用ExecuteAsync
.?ExecuteAsync
razor 語(yǔ)法的實(shí)際渲染是什么。
您可以下載 .NET Core 存儲(chǔ)庫(kù)AspNetCore并檢查所有內(nèi)容如何在命名空間下連接的詳細(xì)信息Microsoft.AspNetCore.Mvc
。
- 1 回答
- 0 關(guān)注
- 144 瀏覽
添加回答
舉報(bào)
0/150
提交
取消