我有这段代码:
[Route]
public HttpResponseMessage PostData[FromBody] DataModel data)
{
... implementation...
}
这会自动将json数据绑定/转换为我的数据模型。但是,我想保存/捕获已发布的原始json文件并将其保存以用于日志记录。 关于如何实现这一目标的任何建议?
答案 0 :(得分:3)
您可以执行以下操作,然后使用JSON转换器将字符串转换为JSON。
[HttpPost]
public HttpResponseMessage PostData([FromBody] string text)
{
// log text.
DataModel data = JsonConvert.DeSerialize<DataModel>(text);
}
或者你也可以,
[HttpPost]
public HttpResponseMessage PostData()
{
string text = Request.Content.ReadAsStringAsync().Result;
//log text
DataModel data = JsonConvert.DeSerialize<DataModel>(text);
}
由于您提到它是用于日志记录,您可能需要考虑在Web API过滤器或委托处理程序中执行此操作 - 以使逻辑更集中,而不是在每个操作方法中使用逻辑。
public class LogApiRequest : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var text = actionContext.Request.Content.ReadAsStringAsync().Result;
MyLogger.Log(LogLevel.INFO, text);
base.OnActionExecuting(actionContext);
}
}
然后注册您的过滤器 - 通常在WebApiConfig.cs中或使用过滤器修饰您的操作方法或控制器类。
config.Filters.Add(new LogApiRequest());