Javascript HttpModule Filter\u OnTransformString导致一些静态文件失败(即css、js)
我有一个HttpModule来分析和监控网站。在这个HttpModule中,它使用响应过滤器来修改响应体,并插入一段代码以将javascript代码加载到text/html内容中Javascript HttpModule Filter\u OnTransformString导致一些静态文件失败(即css、js),javascript,c#,asp.net,httpmodule,Javascript,C#,Asp.net,Httpmodule,我有一个HttpModule来分析和监控网站。在这个HttpModule中,它使用响应过滤器来修改响应体,并插入一段代码以将javascript代码加载到text/html内容中 private string Filter_OnTransformString(string output) { Logger.Info("Filter_OnTransformString", "Enter method for " + Request.RawUrl); if (Response.Co
private string Filter_OnTransformString(string output)
{
Logger.Info("Filter_OnTransformString", "Enter method for " + Request.RawUrl);
if (Response.ContentType != "text/html")
{
Logger.Info("Filter_OnTransformString", "Exiting for " + Response.ContentType + " MIME type for " + Request.RawUrl);
return output;
}
if (output != null)
{
var pos = output.IndexOf("</body>", StringComparison.InvariantCultureIgnoreCase);
Logger.Verbose("Filter_OnTransformString", "pos (of closing </body>) == " + pos);
if (pos > -1)
{
var left = output.Substring(0, pos);
var right = output.Substring(pos);
output = left + "<script type=\"text/javascript\" src=\"/heartbeat.axd/script\"></script>" + right;
}
}
else
{
Logger.Warning("Filter_OnTransformString", "output == null for " + Request.RawUrl);
}
Logger.Info("Filter_OnTransformString", "Exit method for " + Request.RawUrl);
return output;
}
我这里有什么重要的东西遗漏了吗
更新:
目前,我已经对这个问题进行了如下编码:
if (!Request.RawUrl.EndsWithAny(new[] { ".css", ".js" }, StringComparison.InvariantCultureIgnoreCase))
{
Logger.Verbose("Application_BeginRequest", "Attaching Response.Filter to " + Request.RawUrl);
ResponseFilterStream filter = new ResponseFilterStream(Response.Filter);
filter.TransformString += Filter_OnTransformString;
Response.Filter = filter;
}
对于set
output
var,您的语法不正确:
output = left + "<script type="text/javascript" src="/heartbeat.axd/script"></script>" + right;
output=left+“”+right;
连接的正确形式是:
output = left + "<script type='text/javascript' src='/heartbeat.axd/script'></script>" + right;
output=left+“”+right;
这可能会生成一个异常,而不会加载静态文件。在花更多时间解决该问题后,我检查了服务器上的应用程序日志。我找到了罪魁祸首
HttpModule正在抛出一个未经处理的异常,这就是导致请求失败的原因。这是一个很好的捕获,尽管它简化了当前代码,从嵌入的资源文件中提取了
片段。最后一点注意,这个答案实际上并没有解决问题。这一点脚本注入加载heartbeat.axd/script,该脚本正在加载。
output = left + "<script type='text/javascript' src='/heartbeat.axd/script'></script>" + right;