首页 > 后端开发 > C++ > 如何读取 ASP.NET Core 中的 Set-Only Response.Body 属性?

如何读取 ASP.NET Core 中的 Set-Only Response.Body 属性?

Mary-Kate Olsen
发布: 2025-01-08 16:34:41
原创
252 人浏览过

How Can I Read the Set-Only Response.Body Property in ASP.NET Core?

在 ASP.NET Core 中访问 Response.Body:实用指南

直接读取 ASP.NET Core 中的 Response.Body 属性是有问题的,因为它被指定为仅设置。 当需要在写入后访问响应内容时,这提出了一个挑战。

现有(不太理想)的方法

当前的解决方法通常涉及将 Response.Body 替换为 MemoryStream,将内容读入字符串,然后恢复原始流。 此方法虽然有效,但由于其复杂性和潜在的性能开销而并非最佳。

改进的解决方案:自定义中间件

更高效的解决方案利用自定义中间件来创建支持查找的缓冲流。这避免了以前方法中不必要的流交换。 虽然 ASP.NET Core 本质上不支持写入后读取响应流,但自定义中间件提供了一个干净的解决方案。

中间件实现细节

以下中间件简化了该过程:

<code class="language-csharp">public class ResponseCaptureMiddleware
{
    private readonly RequestDelegate _next;

    public ResponseCaptureMiddleware(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);
            string responseBody = new StreamReader(memoryStream).ReadToEnd();
            //Process responseBody here...

            memoryStream.Seek(0, SeekOrigin.Begin);
            await memoryStream.CopyToAsync(originalBody);
        }
    }
}</code>
登录后复制

此中间件暂时用 Response.Body 替换 MemoryStream,捕获响应内容,然后将内容重定向到原始流。 至关重要的是,响应内容 (responseBody) 可在中间件内进行处理。

总结

虽然 Response.Body 是仅设置的,但可以使用自定义中间件方法来访问其内容。此方法提供了一种简化且更有效的方法来处理 ASP.NET Core 应用程序中的响应流操作。

以上是如何读取 ASP.NET Core 中的 Set-Only Response.Body 属性?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板