Я создал класс, который наследуется для IHttpModule. В настоящее время класс получает информацию о запросе и одновременно регистрирует информацию с этим входящим запросом. Я хочу изменить этот запрос, чтобы при вызове моего основного APi он получал измененные значения запроса. Ниже код, который я использую:
Использование IHttpModule
public class KohlsExecutionContextHttpModule1 : IHttpModule
{
public void Init(HttpApplication application)
{
application.BeginRequest += Application_BeginRequest;
}
#region Private Methods
private void Application_BeginRequest(object sender, EventArgs e)
{
try
{
// Tech Note: Initialized the resolver to check for its existence early in this function and exit if doesn't exists.
var application = sender as HttpApplication;
if (application == null || application.Context == null || application.Context.Request == null || application.Context.Request.Headers == null) { return; }
var request = application.Context.Request;
if (request == null) { return; }
var bytes = new byte[request.InputStream.Length];
request.InputStream.Read(bytes, 0, bytes.Length);
request.InputStream.Position = 0;
//I need to modify this request content value and pass it on in the pipeline
string requestContent = Encoding.UTF8.GetString(bytes);
var requestHeaders = request.Headers;
if (requestHeaders == null) { return; }
var context = request.BuildExecutionContext();
var addInfo = LogManager.CreateAdditionalInfo("Url", request.Url.ToString(), "Content", requestContent);
addInfo.Add(_clientSentTimeKey, context.ClientSentTime);
addInfo.Add(_serviceRequestReceivedTime, context.ReceivedTime.ToDateTimeHighPrecisionUTC());
HttpContextUtility.LogExecutionMessage("HttpRequest - After Received On Server", addInfo);
var response = application.Context.Response;
}
catch (Exception ex)
{
LogManager.LogCritical(ex.Message, ex);
}
}
}
В приведенном выше коде я просто получаю запрос ввода из строки requestContent = Encoding.UTF8.GetString (bytes); code. Я хотел изменить этот запрос и отправить его в основной API, который вызывается после этого. Может ли это быть возможно?
Я могу добиться этого, используя делегирующий обработчик в web.api, где я могу изменить запрос перед отправкой запроса основному абоненту.