Изменение тела ответа после завершения конечной точки ⇐ C#
-
Anonymous
Изменение тела ответа после завершения конечной точки
Я пытаюсь использовать промежуточное программное обеспечение для изменения тела ответа после завершения конечной точки. Раньше у меня были проблемы с изменением заголовков под вызовом next(), но с помощью OnStarting() мне удалось их изменить.
Следующая проблема заключается в том, что попытка прочитать тело ответа внутри OnStarting приведет к возникновению исключения. Мне тоже не удалось использовать ActionFilters.
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); вар приложение = builder.Build(); app.UseMiddleware(); приложение.UseAuthorization(); приложение.MapControllers(); приложение.Выполнить(); общедоступный класс EditResponseMiddleware { частный RequestDelegate _next только для чтения; public EditResponseMiddleware (RequestDelegate следующий) { _следующий = следующий; } общедоступная асинхронная задача InvokeAsync (контекст HttpContext) { // Расшифровываем входящий context.Request.Body context.Response.OnStarting(async () => { использование MemoryStream мс = новый MemoryStream(); // Это выдаст: дождитесь context.Response.Body.CopyToAsync( мс); byte[] содержимое = ms.ToArray(); // Шифруем исходящий context.Response.Body }); дождитесь _next(контекст); } } Это выдает ошибку:
System.NotSupportedException: Stream не поддерживает чтение. в System.IO.Stream.CopyToAsync (назначение потока, Int32 bufferSize, CancellationToken cancelToken) в System.IO.Stream.CopyToAsync (пункт назначения потока)
Я пытаюсь использовать промежуточное программное обеспечение для изменения тела ответа после завершения конечной точки. Раньше у меня были проблемы с изменением заголовков под вызовом next(), но с помощью OnStarting() мне удалось их изменить.
Следующая проблема заключается в том, что попытка прочитать тело ответа внутри OnStarting приведет к возникновению исключения. Мне тоже не удалось использовать ActionFilters.
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); вар приложение = builder.Build(); app.UseMiddleware(); приложение.UseAuthorization(); приложение.MapControllers(); приложение.Выполнить(); общедоступный класс EditResponseMiddleware { частный RequestDelegate _next только для чтения; public EditResponseMiddleware (RequestDelegate следующий) { _следующий = следующий; } общедоступная асинхронная задача InvokeAsync (контекст HttpContext) { // Расшифровываем входящий context.Request.Body context.Response.OnStarting(async () => { использование MemoryStream мс = новый MemoryStream(); // Это выдаст: дождитесь context.Response.Body.CopyToAsync( мс); byte[] содержимое = ms.ToArray(); // Шифруем исходящий context.Response.Body }); дождитесь _next(контекст); } } Это выдает ошибку:
System.NotSupportedException: Stream не поддерживает чтение. в System.IO.Stream.CopyToAsync (назначение потока, Int32 bufferSize, CancellationToken cancelToken) в System.IO.Stream.CopyToAsync (пункт назначения потока)
Мобильная версия