Ada*_*dam 7 c# iis ssas httpmodule httprequest
我需要在IIS中修改某些HttpRequests(SSAS连接字符串)的内容.基本上,我需要向请求中包含的SOAP添加一个元素.
到目前为止,我的方法是向HttpRequest添加一个Filter,并在过滤器的Read方法中执行更改.据我所知,Read永远不会被执行.
我对Request.Filter的理解是它从IIS处理请求时读取,因此IIS应该看到我修改过的Request.
我正在尝试使用HttpModule实际可行的是我的Filter方法是否正确?
如果是这样,什么会导致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
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为可以使用 http 模块修改请求,但是可以修改响应。该HttpRequest对象大部分是只读的,因此它通常在任何上下文中都是不可变的,而不仅仅是在模块中。
如果您真的很绝望,您可以尝试使用反射来访问更多的 http 请求对象。然而,要访问、修改或调用非公共成员,您的进程将需要完全信任权限,这在 Web 环境中风险很大。
| 归档时间: |
|
| 查看次数: |
4923 次 |
| 最近记录: |