【发布时间】:2022-03-15 16:42:20
【问题描述】:
我创建了一个日志,我需要检索请求正文以保存在数据库中。我用 HttpActionContext 创建了一个过滤器。 我尝试通过 filterContext.Request.Content.ReadAsStringAsync().Result; 恢复 但它总是返回一个空字符串。
LogFilter.cs
public override void OnActionExecuting(HttpActionContext filterContext)
{
try
{
Task<string> content = filterContext.Request.Content.ReadAsStringAsync();
string body = content.Result;
logModel.RequestLog rl = new logModel.RequestLog();
rl.IP = ((HttpContextWrapper)filterContext.Request.Properties["MS_HttpContext"]).Request.UserHostAddress;
rl.Type = filterContext.ControllerContext.RouteData.Values["controller"].ToString().ToUpper();
rl.URL = filterContext.Request.RequestUri.OriginalString;
rl.Operation = filterContext.Request.Method.Method;
rl.RequestDate = DateTime.Now;
filterContext.ControllerContext.RouteData.Values.Add("reqID", new deviceLog.RequestLog().Add(rl).ID.ToString());
}
catch { }
//return new deviceLog.RequestLog().Add(rl);
base.OnActionExecuting(filterContext);
}
【问题讨论】:
-
您正在数据库中保存原始请求?听起来像是一个值得商榷的设计选择。
-
我正在保存请求正文,以便能够跟踪一些错误。
-
你如何使用这个过滤器?将其分配给操作方法?
-
用作全局过滤器,用于我的应用程序的所有控制器
标签: c# asp.net-mvc asp.net-web-api