Я должен изменить содержание определенного HttpRequests (строки подключения SSAS) в IIS. В основном я должен добавить элемент к SOAP, содержавшемуся в запросе.
Мой подход до сих пор должен был добавить Фильтр к HttpRequest и выполнить изменение в методе Read фильтра. Насколько я могу сказать, тем не менее, что Read никогда не выполняется.
Мое понимание Запроса. Фильтр - то, что это читается из того, когда IIS обрабатывает запрос, таким образом, 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
}
}
Я не считают, что можно изменить запрос с помощью модуля http, однако можно изменить ответ . Объект HttpRequest
в основном доступен только для чтения, поэтому он обычно неизменяем в любом контексте, а не только из модуля.
Если вы действительно отчаялись, вы можете попробовать использовать отражение, чтобы получить доступ к большему количеству объектов HTTP-запроса. Однако для доступа, изменения или вызова закрытых членов вашему процессу потребуются разрешения полного доверия , что очень рискованно в веб-среде .