C# 如何在关闭HTTPModule中的HTML标记之前注入HTML
我试图在响应中注入一些额外的标记,但它没有按预期输出 例如,将输出以下代码:C# 如何在关闭HTTPModule中的HTML标记之前注入HTML,c#,asp.net,httpmodule,C#,Asp.net,Httpmodule,我试图在响应中注入一些额外的标记,但它没有按预期输出 例如,将输出以下代码: ... </html>CONTENT private void OnEndRequest(Object source, EventArgs e) { HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; context.Response.Wr
... </html>CONTENT
private void OnEndRequest(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
context.Response.Write("CONTENT");
}
。。。所容纳之物
私有void OnEndRequest(对象源、事件参数)
{
HttpApplication=(HttpApplication)源;
HttpContext=application.context;
context.Response.Write(“内容”);
}
但是我想在结束html标记之前输出内容
... CONTENT</html>
。。。所容纳之物
关于如何实现这一点有什么想法吗?您应该使用
HttpContext.Response.Filter
检查此MSDN文档页面:
HttpContext.Current.Response.Filter
中
为了在文档的某些部分中注入HTML,只需将字节转换为字符串,并使用string.IndexOf
或正则表达式(如果在整个代码行中,则要取消挖掘)
之后,只需连接、修改或替换获得的字符串,并将其放入原始默认响应筛选器中的包装流中。您应该使用
HttpContext.response.filter
检查此MSDN文档页面:
HttpContext.Current.Response.Filter
中
为了在文档的某些部分中注入HTML,只需将字节转换为字符串,并使用string.IndexOf
或正则表达式(如果在整个代码行中,则要取消挖掘)
之后,只需连接、修改或替换获得的字符串,并将其放入原始默认响应筛选器中的包装流中。为什么选择HttpModule?为什么不扩展/覆盖页面?基本上,我不认为您可以像重写页面那样轻松地实现这一点,因为您必须确保在呈现模块之后模块已加载到ASP.NET堆栈中,确定这是否是对特定“动词”的请求(请参见HttpHandler),然后在点处执行Regex=>insert。而对于页面,您可以在调用base.renderdTag之前覆盖RenderdTag,将内容写入HtmlTextWriter,因为我不拥有该页面。我正在写一个插件,它可以在任何asp.net应用程序中使用,所以它不像覆盖页面那么简单:)@Fixer,你解决问题了吗?我做了类似的事情,但在EndRequest期间重写流时遇到了问题。你能发布一些代码来解释你是如何做到的吗?感谢您为什么选择HttpModule?为什么不扩展/覆盖页面?基本上,我不认为您可以像重写页面那样轻松地实现这一点,因为您必须确保在呈现模块之后模块已加载到ASP.NET堆栈中,确定这是否是对特定“动词”的请求(请参见HttpHandler),然后在点处执行Regex=>insert。而对于页面,您可以在调用base.renderdTag之前覆盖RenderdTag,将内容写入HtmlTextWriter,因为我不拥有该页面。我正在写一个插件,它可以在任何asp.net应用程序中使用,所以它不像覆盖页面那么简单:)@Fixer,你解决问题了吗?我做了类似的事情,但在EndRequest期间重写流时遇到了问题。你能发布一些代码来解释你是如何做到的吗?谢谢