我有一个像这样的Web Api 2.2控制器动作:
[HttpPost]
[Route("{id}")]
public void Update(int id, [FromBody] MyData data) {}
HTTP客户端使用application/json
邮件正文发出POST请求,但有时System.Net.Http.Formatting.JsonMediaTypeFormatter
无法解析正文包含的JSON,并在调用控制器操作之前抛出异常
在这种情况下,我想记录格式化程序抛出的异常和引起异常的JSON文本。我希望这在生产中发生(以便正确地解释失败的请求失败),因此仅仅追踪'这里不是一个可以接受的选择。我觉得这是可以接受的事情。
乍一看,全局错误处理工具introduced with Web Api 2.1就是这里的事情。但在我的System.Web.Http.ExceptionHandling.IExceptionLogger
中,已经没有机会阅读邮件正文:
public override void OnException(HttpActionExecutedContext context)
{ string body = await context.Request.Content.ReadAsStringAsync(); // essentially
// body is an empty string! the formatter already consumed it, and it's not available now
}
我有哪些选项可用于ASP.NET和/或Web Api 2扩展点来处理由MediaTypeFormatter引发的异常和记录实际的请求正文?