Я разрабатываю веб-службу asmx (т. Е. ASP.NET 2.0).
Есть фрагмент кода, который может прочитать содержимое HTTP-запроса (через HttpContext.Current.Request.InputStream
) во время его обработки.Я понимаю, что InputStream может быть прочитан только один раз для запроса, и я уверен, что никогда не буду пытаться прочитать его более одного раза.
Кажется, проблема в том, что если InputStream будет прочитан на раннихВ жизненном цикле приложения (например, после pskill w3wp
, во время Application_Start) HTTP-запрос завершается с ошибкой HTTP 400 - Bad Request, без объяснения, без исключения и без записи в журнале httperr.Если он читается позже (например, в самом веб-методе), запросы выполняются нормально, независимо от того, читается ли InputStream или нет.Application_Start работает нормально, если InputStream не читается.
Это какая-то ошибка ASP.NET?Ошибка IIS?Или я делаю что-то не так, решившись читать InputStream?И если да, есть ли другой способ взглянуть на «сырое» содержимое запроса, не нарушая внутреннюю работу IIS / ASP.NET?
Короче говоря, добавления этого кода в Application_Start достаточно длявоспроизведите эту ошибку:
using (StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream))
reader.ReadToEnd();