Asp.net core ASP.NET核心中间件能否使用Razor有条件地呈现HTML?

Asp.net core ASP.NET核心中间件能否使用Razor有条件地呈现HTML?,asp.net-core,razor-pages,Asp.net Core,Razor Pages,我正在将ASP.NET HTTP处理程序移植到ASP.NET核心中间件类。大多数情况下,处理程序会以简单的UTF-8文本响应进行响应。有时,HTTP处理程序会在ASP.NET会话状态中填充一个大对象图,然后执行响应。重定向到ASPX Web表单页。web表单页面从会话状态中提取对象图并呈现它 在我看来,重定向是不必要的,而且它迫使我在应用程序中包含会话状态,这是我不想要的。我想要的是将Web表单页面转换为Razor页面,然后以某种方式直接调用Razor页面来呈现我的对象图。我的中间件在本质上是否

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

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

我可以使用属性
ObjectGraph
轻松创建
PageModel
类,但是如何让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);
       }
    }

渲染视图后,您希望从那里执行什么操作?是否需要将其作为
部分视图
字符串
返回?既然您提到了返回UTF-8文本,我猜您希望将Razor视图转换为字符串,那么请查看-@RyanWilson:理想情况下,我希望视图直接呈现给中间件从其
HttpContext
参数获得的
响应
对象。中间件只是不起作用,没有进一步的处理。你可以让中间件构建模型,序列化它并将其添加到HttpContext.Items,然后你可以在Razor页面中检索它。我希望避免序列化模型,而是让Razor引擎使用PageModel的一个实例,并让它直接将结果输出到Context.Response,而无需对字符串进行间歇转换。对象图可能相当大。