到目前为止,我的方法是向HttpRequest添加一个过滤器,并在过滤器的Read方法中执行更改。就我所知,Read从未被执行过。
我的理解是,当IIS处理请求时,Request.Filter会被读取,因此IIS应该看到我的修改后的请求。
使用HttpModule实现这个功能是否可行?我的过滤器方法是否正确?
如果是这样,请问是什么原因导致Read没有被命中?
以下是我的代码简化版本:
public class CustomHttpModule : IHttpModule {
private HttpApplication app;
public string ModuleName {
get { return "CustomHttpModule"; }
}
public void Init(HttpApplication context) {
app = context;
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e) {
var request = app.Context.Request;
request.Filter = new CustomHttpFilter(request.Filter);
}
}
public class CustomHttpFilter : Stream {
private Stream outputStream;
public CustomHttpFilter(Stream outputFilter) {
outputStream = outputFilter;
}
public override int Read(byte[] buffer, int offset, int count) {
// read and make the necessary changes
}
}