c# - 将渲染的 Razor 视图另存为 HTML 字符串
问题描述
是否有可能,一旦 aRazor View
在浏览器中呈现,HTML 和标记的内容(图像、表格、数据等)可以保存为字符串或其他类型?
我希望能够Razor View
为客户生成检查输出中的一切是否正常,然后我希望他们单击一个保存所有 HTML 的按钮(没有所有剃刀标记等)。
你如何将 HTML 传递回一个Action
,如果它必须被处理预渲染,那么这也能做到。
然后我可以使用它来生成 PDF 并节省处理时间,因为我会将字符串保存在数据库中。
顺便说一句,这不是局部视图,也不会使用局部视图,而且我知道在 Razor 视图中仍有一些问题需要修复,此时我对保存 HTML 更感兴趣。
TIA
解决方案
您可以使用中间件来获取发送到浏览器的 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。Configure
尽早在 Startup 的方法中注册中间件:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseMiddleware<ResponseToStringMidleware>();
...
}
更多信息:Razor 页面中的中间件
推荐阅读
- database - 在模式更新上创建 Hibernate 自动 SQL 迁移脚本以与 flyway 一起使用
- java - 无法在 Intellij 2019.1.3 Ultimate Edition 中安装 maven 依赖项
- asp.net - 在 asp.net 中使用 web 配置的 url 路由
- javascript - Javascript将循环中的数据值与if进行比较
- python - 如何编写同步和异步代码的类实例化形式?
- python - 在 tensorflow 中使用迭代器生成特征和标签
- python - 为什么我会在时间序列分析中得到如此奇怪的结果?
- python - 当我使用 python3 时出现 ModuleNotFoundError
- android - 是否可以通过 WebUSB 访问 android 配件?
- c# - 如何在 C# 中修复“不仅选定的项目进入集合”