Перехват запроса веб-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; }
Заранее спасибо!
КУБ.СМ
-