Я следую этому сообщению , как регистрировать все запросы.
Но этот код:
public async Task Invoke(HttpContext context)
{
await this.LogRequest(context.Request);
await this._next(context);
}
private async Task LogRequest(HttpRequest request)
{
var body = request.Body;
request.EnableRewind();
var buffer = new byte[Convert.ToInt32(request.ContentLength)];
await request.Body.ReadAsync(buffer, 0, buffer.Length);
request.Body.Seek(0, SeekOrigin.Begin);
var bodyAsText = Encoding.UTF8.GetString(buffer);
request.Body = body;
}
не работает, потому что я получаю
"A non-empty request body is required."
в контроллере с атрибутом [ApiController]
[HttpPut("MyMethod")]
public async Task<ActionResult<MyModel>> MyMethod([FromBody]MyArgs model)
{
//...
}
Я пытаюсь делать все виды комбинаций
string bodyAsText = null;
if (request.ContentLength > 0)
{
var body = request.Body;
request.EnableRewind();
using (var streamReader = new StreamReader(request.Body, Encoding.UTF8))
{
bodyAsText = await streamReader.ReadToEndAsync();
request.Body.Seek(0, SeekOrigin.Begin);
}
request.Body = body;
}
, но ничего не работает.Что мне здесь не хватает?Есть ответ с аналогичным решением на SO , но я не понимаю, почему он не работает в моем случае.
Если я комментирую код для чтения тела, он работает.