将渲染的Razor视图另存为HTML字符串

问题描述 投票:0回答:1

一旦在浏览器中呈现了Razor View,HTML和标记内容(图像,表格,数据等)是否可以保存为字符串或其他类型?

我希望能够为客户生成Razor View以检查输出中的一切是否正常,然后我希望他们单击​​一个保存所有HTML的按钮(没有所有的剃刀标记等)。

如何将HTML传回Action,如果必须在预渲染时进行处理,那么如何才能完成。

然后,我可以使用它来生成PDF并节省处理时间,因为我将字符串保存在数据库中。

顺便说一下,这不是局部视图,也不会使用局部视图,我也知道在Razor View中还有一些东西需要修复,我现在更感兴趣的是保存HTML。

TIA

HTML Pre rendering HTML Post Rendering

c# html5 asp.net-core-2.0 razor-pages
1个回答
0
投票

您可以使用中间件获取正在发送到浏览器的HTML副本。使用以下内容创建名为ResponseToString的类:

public class ResponseToStringMidleware
{
    RequestDelegate _next;

    public ResponseToStringMidleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        var isHtml = context.Response.ContentType?.ToLower().Contains("text/html");
        Stream responseBody = context.Response.Body;
        using (var memoryStream = new MemoryStream())
        {
            context.Response.Body = memoryStream;

            await _next(context);

            if (context.Response.StatusCode == 200 && isHtml.GetValueOrDefault())
            {
                memoryStream.Position = 0;
                string html = new StreamReader(memoryStream).ReadToEnd();
                // save the HTML

            }
            memoryStream.Position = 0;
            await memoryStream.CopyToAsync(responseBody);
        }
    }
}

用一些代码替换// save the HTML以根据需要保留HTML。尽早在Startup的Configure方法中注册中间件:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }
    app.UseMiddleware<ResponseToStringMidleware>();
    ...
}

更多信息:qazxsw poi

© www.soinside.com 2019 - 2024. All rights reserved.