首页 > 解决方案 > ASP.NET Core 中间件能否使用 Razor 有条件地呈现 HTML?

问题描述

我正在将 ASP.NET HTTP 处理程序移植到 ASP.NET Core 中间件类。大多数时候,处理程序以简单的 UTF-8 文本响应进行响应。有时,HTTP 处理程序会在 ASP.NET 状态下填充一个大对象图Session,然后Response.Redirect对 ASPX Web 表单页面执行操作。Web 表单页面从状态中提取对象图Session并呈现它。

在我看来,重定向是不必要的,而且它迫使我在我的应用程序中包含会话状态,这是我不想要的。我想要的是将 Web 表单页面转换为 Razor 页面,然后以某种方式直接调用 Razor 页面来呈现我的对象图。我的中间件能否在本质上将控制权交给 Razor,指定:“这是我希望你渲染的 cshtml 页面,这是一个对象图?”

我可以轻松地创建PageModel具有属性的类ObjectGraph,但是如何让 Razor 控制以呈现该 cshtml 页面?

   public async Task Invoke(HttpContext ctx) {
       var objectGraph = ComputeObjectGraph(ctx.Request);
       if (IsSimpleRendering(ctx.Request)) {
           async DoSimpleRendering(objectGraph, ctx.Response);
       } else {
           var razorPageModel = new HtmlRendererModel(objectGraph);
           // TODO: hand off to Razor, using "htmlrenderer.cshtml" as a template.
           // async DoHtmlRendering("htmlrenderer.cshtml", razorPageModel, ctx);
       }
    }

标签: asp.net-corerazor-pages

解决方案


推荐阅读