在处理消耗主体的`MediaTypeFormatter`引发的异常时,记录HTTP请求主体

时间:2014-09-19 02:56:05

标签: asp.net asp.net-web-api2

我有一个像这样的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引发的异常记录实际的请求正文?

0 个答案:

没有答案