相关疑难解决方法(0)

如何阅读ASP.NET Core Response.Body?

我一直在努力Response.Body从ASP.NET核心操作中获取属性,而我能够识别的唯一解决方案似乎不是最佳的.该解决方案需要Response.Body在一段MemoryStream时间内将流读取到字符串变量中,然后在发送到客户端之前将其交换回来.在下面的示例中,我试图Response.Body在自定义中间件类中获取值. Response.Body是一个在ASP.NET核心出于某种原因唯一的财产?我在这里遗漏了什么,或者这是一个疏忽/错误/设计问题?有更好的阅读方式Response.Body吗?

当前(次优)解决方案:

public class MyMiddleWare
{
    private readonly RequestDelegate _next;

    public MyMiddleWare(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        using (var swapStream = new MemoryStream())
        {
            var originalResponseBody = context.Response.Body;

            context.Response.Body = swapStream;

            await _next(context);

            swapStream.Seek(0, SeekOrigin.Begin);
            string responseBody = new StreamReader(swapStream).ReadToEnd();
            swapStream.Seek(0, SeekOrigin.Begin);

            await swapStream .CopyToAsync(originalResponseBody);
            context.Response.Body = originalResponseBody;
        }
    }
}  
Run Code Online (Sandbox Code Playgroud)

尝试使用EnableRewind()的解决方案: 这仅适用于Request.Body,而不是Response.Body.这导致从而Response.Body不是实际的响应主体内容中读取空字符串. …

c# asp.net-core-mvc asp.net-core asp.net-core-middleware

52
推荐指数
5
解决办法
3万
查看次数