Как изменить запрос в классе, наследуя IHttpModule - PullRequest
0 голосов
/ 30 августа 2018

Я создал класс, который наследуется для 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, где я могу изменить запрос перед отправкой запроса основному абоненту.

...