如果您想解析任何文件(包括文本文件、JavaScript等)中的
~/,可以编写一个处理程序为其分配过滤器,并使用该过滤器搜索这些路径...例如...
public class StringParsingFilter : MemoryStream {
public Stream OriginalStream {
get { return this.m_OriginalStream; }
set { this.m_OriginalStream = value; }
}
private System.IO.Stream m_OriginalStream;
public StringParsingFilter() : base() {
this.m_OriginalStream = null;
}
public override void Flush() {
this.m_OriginalStream.Flush();
}
public override void Write(byte[] buffer, int offset, int count) {
string value = System.Text.Encoding.Default.GetString(buffer);
string contentType = HttpContext.Current.Response.ContentType;
...
byte[] bytes = System.Text.Encoding.Default.GetBytes(value);
this.m_OriginalStream.Write(bytes, offset, count + (bytes.Length - buffer.Length));
}
}
你需要编写一个自定义处理程序来确定何时分配此过滤器,例如以下内容...
public class FilterControlModule : IHttpModule {
public void Init(HttpApplication context) {
HttpApplication oAppContext = context;
oAppContext.BeginRequest += new EventHandler(_HandleSettingFilter);
}
private void _HandleSettingFilter(object sender, EventArgs e) {
...
StringParsingFilter filter = new StringParsingFilter();
filter.OriginalStream = HttpContext.Current.Response.Filter;
HttpContext.Current.Response.Filter = (Stream)filter;
}
}
其实只需要说“查找IHttpModules”可能会更容易,但这是我用来解析路径不是ASP.net文件的一些代码。
您还需要更改IIS设置中的一些内容,以允许通过将ASP.net ISAPI设置为所有处理的文件的通配符来解析文件。如果您使用的是IIS6,可以在此网站上了解更多信息...
您还可以使用此方法修改任何文件类型,因此可以为图像分配一些过滤器,为JavaScript或样式表分配一些过滤器,或者...真正的任何东西...