【发布时间】:2011-03-04 18:58:03
【问题描述】:
我需要在 IIS 中修改某些 HttpRequests(SSAS 连接字符串)的内容。基本上,我需要在请求中包含的 SOAP 中添加一个元素。
到目前为止,我的方法是向 HttpRequest 添加一个过滤器,并在过滤器的 Read 方法中执行更改。不过,据我所知,Read 永远不会被执行。
我对 Request.Filter 的理解是它是在 IIS 处理请求时读取的,因此 IIS 应该会看到我修改后的请求。
我正在尝试使用 HttpModule 做的事情实际上是否可行,我的过滤器方法是否正确?
如果是这样,什么会导致读取未命中?
这是我的代码的简化版本:
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
}
}
【问题讨论】:
-
我也有类似的问题。你采取了哪种方法?您是否使用反射来启用对请求对象的写入,或者您是否实现了请求过滤器?
标签: c# iis ssas httpmodule httprequest