在 ASP.NET Core 中访问 Response.Body:一种改进的方法
由于其只写性质,在 ASP.NET Core 中直接读取 Response.Body
会带来挑战。 然而,存在有效的方法来检索其内容。
解决低效方法
之前涉及MemoryStream
替换的解决方案虽然有效,但会带来性能开销。 EnableRewind
方法适用于Request.Body
,对Response.Body
无效。
引入简化的中间件解决方案
最佳解决方案利用自定义中间件ResponseRewindMiddleware
来优雅地处理Response.Body
读取。该中间件拦截响应流,暂时将其重定向到 MemoryStream
,处理请求,读取 MemoryStream
内容,然后无缝恢复原始流。
增强的中间件实施
这是 ResponseRewindMiddleware
的改进实现:
<code class="language-csharp">public class ResponseRewindMiddleware { private readonly RequestDelegate _next; public ResponseRewindMiddleware(RequestDelegate next) { _next = next; } public async Task Invoke(HttpContext context) { var originalBody = context.Response.Body; using (var memoryStream = new MemoryStream()) { context.Response.Body = memoryStream; await _next(context); memoryStream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(memoryStream)) { var responseBody = await reader.ReadToEndAsync(); // Process responseBody here... } memoryStream.Seek(0, SeekOrigin.Begin); await memoryStream.CopyToAsync(originalBody); } } }</code>
该中间件可以有效地捕获响应内容,而不会影响性能或数据完整性。 捕获的 responseBody
字符串可随时在中间件中进行进一步处理。 这种方法确保了一种干净有效的方式来访问响应正文内容。
以上是如何高效读取ASP.NET Core中的Response.Body属性?的详细内容。更多信息请关注PHP中文网其他相关文章!