Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在关闭HTTPModule中的HTML标记之前注入HTML_C#_Asp.net_Httpmodule - Fatal编程技术网

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期间重写流时遇到了问题。你能发布一些代码来解释你是如何做到的吗?谢谢