一旦在浏览器中呈现了Razor View
,HTML和标记内容(图像,表格,数据等)是否可以保存为字符串或其他类型?
我希望能够为客户生成Razor View
以检查输出中的一切是否正常,然后我希望他们单击一个保存所有HTML的按钮(没有所有的剃刀标记等)。
如何将HTML传回Action
,如果必须在预渲染时进行处理,那么如何才能完成。
然后,我可以使用它来生成PDF并节省处理时间,因为我将字符串保存在数据库中。
顺便说一下,这不是局部视图,也不会使用局部视图,我也知道在Razor View中还有一些东西需要修复,我现在更感兴趣的是保存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。尽早在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