Я создаю журнал, и мне нужно получить тело запроса для сохранения в db. Я создал фильтр с HttpActionContext. Я попытался восстановить через filterContext.Request.Content.ReadAsStringAsync(). Результат; , но он всегда возвращает мне пустую строку.WebApi получить сообщение raw body внутри фильтра
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);
}
Вы сохраняете необработанный запрос внутри своей базы данных? Звучит как сомнительный выбор дизайна. –
Я сохраняю тело запроса, чтобы отслеживать некоторые ошибки. –
Как вы используете этот фильтр? Присвоить его методу действия? –