在MVC中读取HttpContext的响应体

时间:2017-12-10 12:04:54

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

我正在创建一个动作过滤器,它应该读取动作返回的响应,从中收集一些数据然后记录它,但我找不到任何可以读取响应体的地方。我尝试使用以下代码在HttpContext中的respone中访问属性名称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());  
          }
    }

1 个答案:

答案 0 :(得分:1)

我无法从" Stream"中提取,因此我决定使用"结果数据"将数据存入我的日志。

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...