Asp.net mvc 如何在ASP.NET MVC3应用程序中记录Request.InputStream和Response.OutputStream流量以执行特定操作?
对于一组特定的操作,我需要记录传入的请求InputStream以及传出的Response.OutputStream 我设想为此使用ActionFilterAttribute并重写OnActionExecuted和OnResultExecuted方法 所以我从这个想法开始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
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);
}
}