为了账号安全,请及时绑定邮箱和手机立即绑定

哪个类负责生成响应?

哪个类负责生成响应?

C#
繁花不似锦 2023-08-13 15:46:28
我是 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根据结果的类型(ViewResultPageResultContentResultJsonResult等)进行不同的处理。对于ViewResult,其主要职责是设置HttpResponse对象属性(StatusCodeContentTypeBody等)。

内部ExecuteResultAsync调用RenderAsync负责渲染视图及其布局。

再次,内部RenderAsync调用ExecuteAsyncExecuteAsyncrazor 语法的实际渲染是什么。

您可以下载 .NET Core 存储库AspNetCore并检查所有内容如何在命名空间下连接的详细信息Microsoft.AspNetCore.Mvc


查看完整回答
反对 回复 2023-08-13
  • 1 回答
  • 0 关注
  • 103 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信