【问题标题】:Read response body of HttpContext in MVC在 MVC 中读取 HttpContext 的响应正文
【发布时间】:2017-12-10 12:04:54
【问题描述】:

我正在创建一个动作过滤器,它应该读取动作返回的响应,从中收集一些数据然后记录它,但是我找不到可以读取响应正文的任何​​地方。我尝试使用以下代码在 HttpContext 的响应中访问属性名称 OutputStream,但我不断收到错误消息,指出此流不支持 Length 属性和 Read 方法。

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
          byte[] buffer = new byte[filterContext.HttpContext.Response.OutputStream.Length];                                 
          using (MemoryStream ms = new MemoryStream())  
          { 
               int read; 
               while ((read = filterContext.HttpContext.Response.OutputStream.Read(buffer, 0, buffer.Length)) > 0)  
               { 
                    ms.Write(buffer, 0, read);
               }
               string html = Encoding.UTF8.GetString(ms.ToArray());  
          }
    }

【问题讨论】:

标签: c# html asp.net-mvc response httpcontext


【解决方案1】:

我无法从“Stream”中提取,所以我决定使用“Result Data”来获取数据到我的日志中。

public class LogResultFilter : IActionFilter, IResultFilter
{
    public void OnResultExecuted(ResultExecutedContext filterContext)
    {

        var responseBody = string.Empty;
        if (filterContext.Result is ViewResultBase)
        {
            responseBody = new JavaScriptSerializer().Serialize(((ViewResultBase)filterContext.Result).ViewData);
        }

        if (filterContext.Result is JsonResult)
        {
            responseBody = new JavaScriptSerializer().Serialize(((JsonResult)filterContext.Result));
        }

        // Continue...  

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 2021-02-13
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2015-10-10
    相关资源
    最近更新 更多