Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在ASP.NET MVC3应用程序中记录Request.InputStream和Response.OutputStream流量以执行特定操作?_Asp.net Mvc_Logging_Asp.net Mvc 3_Enterprise Library - Fatal编程技术网

Asp.net mvc 如何在ASP.NET MVC3应用程序中记录Request.InputStream和Response.OutputStream流量以执行特定操作?

Asp.net mvc 如何在ASP.NET MVC3应用程序中记录Request.InputStream和Response.OutputStream流量以执行特定操作?,asp.net-mvc,logging,asp.net-mvc-3,enterprise-library,Asp.net Mvc,Logging,Asp.net Mvc 3,Enterprise Library,对于一组特定的操作,我需要记录传入的请求InputStream以及传出的Response.OutputStream 我设想为此使用ActionFilterAttribute并重写OnActionExecuted和OnResultExecuted方法 所以我从这个想法开始 public class ActionLoggerAttribute : ActionFilterAttribute { public override void OnActionExecuted(ActionExecu

对于一组特定的操作,我需要记录传入的请求InputStream以及传出的Response.OutputStream

我设想为此使用ActionFilterAttribute并重写OnActionExecuted和OnResultExecuted方法

所以我从这个想法开始

public class ActionLoggerAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        base.OnActionExecuted(filterContext);

        HttpRequestBase request = filterContext.HttpContext.Request;
        // TODO: Log the Request.InputStream
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        base.OnResultExecuted(filterContext);

        HttpResponseBase response = filterContext.HttpContext.Response;
        // TODO: Log the Response.OutputStream
    }
}
理想情况下,我将把它与企业库日志连接起来,因为我已经在使用它进行错误日志记录了

  • 我是否在适当的时间访问输入和输出流
  • 我可以使用企业库轻松记录流吗
  • 对我的问题有完全不同的更好的解决方案吗

  • 谢谢

    为了捕获响应,您可以使用:

    然后您可以拥有一个自定义操作属性:

    public class ActionLoggerAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var request = filterContext.HttpContext.Request;
            var response = filterContext.HttpContext.Response;
            response.Filter = new CaptureResponse(response.Filter);
    
            // TODO: Log the Request.InputStream
    
            base.OnActionExecuting(filterContext);
        }
    }
    

    所以我发现使用OnActionExecuting比OnActionExecuted更有效。请求.输入流在第一个上为空。但是,我仍在努力记录Response.OutputStream。这似乎是只写,我需要读它!谢谢@Darin,很抱歉,我花了这么长时间才接受我使用了一个解决方案,但刚刚有机会使用您的解决方案来清理它。
    public class ActionLoggerAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var request = filterContext.HttpContext.Request;
            var response = filterContext.HttpContext.Response;
            response.Filter = new CaptureResponse(response.Filter);
    
            // TODO: Log the Request.InputStream
    
            base.OnActionExecuting(filterContext);
        }
    }