ccromer1976 Ответов: 1

Перехват запроса веб-API и изменение тела/содержимого


Привет,

Я экспериментирую с промежуточным программным обеспечением OWIN в приложении Web API и хочу перехватить запрос в конвейере и декодировать тело запроса в полете, прежде чем запрос попадет в контроллер API/действие.

Я взял строку json и base 64 закодировал ее как часть этого теста. Я могу перехватить запрос, прочитать основной текст, декодировать его, чтобы получить исходную строку, но я не могу обновить тело запроса новыми данными. Вот фрагмент кода:

public override async Task Invoke(IOwinContext context)
        {
            if (context.Request.ContentType.Equals("text/plain"))
            {
                string body = new StreamReader(context.Request.Body).ReadToEnd();

                byte[] data = Convert.FromBase64String(body);
                string decodedString = Encoding.UTF8.GetString(data);

                context.Request.ContentType = "application/json";
                context.Request.Body = new MemoryStream(Encoding.UTF8.GetBytes(decodedString));
            }

            await Next.Invoke(context);
        }


Этот код выполняется без проблем, и я вижу, что декодированное строковое значение имеет правильные данные. Кикер заключается в том, что когда запрос переходит к контроллеру / действию, тело является телом старой строки данных / кодировки.

Кто-нибудь пытался перехватить запрос api через owin и заменить его чем-то другим, чем то, что было первоначально опубликовано?

Пример контроллера / действия snipped используется для извлечения значения из тела запроса:

// POST api/values
        public void Post([FromBody]string value)
        {
            var req = Request;
            var x = value;

            var y = x;
        }



Заранее спасибо!

КУБ.СМ

-

1 Ответов