是否可以在IIS HttpModule中修改HttpRequest POST的内容?

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)

jri*_*sta 0

我不认为可以使用 http 模块修改请求但是可以修改响应。该HttpRequest对象大部分是只读的,因此它通常在任何上下文中都是不可变的,而不仅仅是在模块中。

如果您真的很绝望,您可以尝试使用反射来访问更多的 http 请求对象。然而,要访问、修改或调用非公共成员,您的进程将需要完全信任权限,这在 Web 环境中风险很大