是否可以记录对 ASP.NET Web API 发出的每个 HTTP 请求,即使请求格式不正确,或者由于某些其他原因无法路由到其中一个控制器。
例如,如果一个 POST 方法有一个 Order 模型作为它的参数,一个不正确的请求会阻止它到达控制器的 POST 方法。我想提醒某人,以便采取措施防止将来出现故障。
有没有办法从控制器进一步向上游捕获这些请求?
是否可以记录对 ASP.NET Web API 发出的每个 HTTP 请求,即使请求格式不正确,或者由于某些其他原因无法路由到其中一个控制器。
例如,如果一个 POST 方法有一个 Order 模型作为它的参数,一个不正确的请求会阻止它到达控制器的 POST 方法。我想提醒某人,以便采取措施防止将来出现故障。
有没有办法从控制器进一步向上游捕获这些请求?
无论是使用Tracing,都需要实现ITraceWriter,如下图
http://www.asp.net/web-api/overview/testing-and-debugging/tracing-in-aspnet-web-api
或者实现消息处理程序
http://www.strathweb.com/2012/05/implementing-message-handlers-to-track-your-asp-net-web-api-usage/
http://www.asp.net/web-api/overview/working-with-http/http-message-handlers
消息处理程序允许您在消息到达 HttpControllerDispatcher 之前更改消息,因此您可以处理路由和操作方法选择的常见问题。
但是,当您在 IIS 上托管时,请不要犹豫使用 AppFabric 日志记录,因为它可以在请求到达您的 Web 应用程序之前在出现问题时为您提供信息。它处理 Web 应用程序中存在全局错误的场景,例如 web.config 错误。
如果您在 ASP.NET Web API 中按Tracing in ASP.NET Web API启用跟踪,则内置跟踪基础结构将记录您所追求的信息。
在内容协商失败的格式错误的请求的情况下,您将看到 DefaultContentNegotiator 中发生 HttpError。
以下是此类错误的简单跟踪示例:
DefaultContentNegotiator;Negotiate;Type='HttpError', formatters=[JsonMediaTypeFormatterTracer, XmlMediaTypeFormatterTracer, FormUrlEncodedMediaTypeFormatterTracer, FormUrlEncodedMediaTypeFormatterTracer]
跟踪编写器被赋予一个TraceRecord作为其输入,它将包含请求信息以及您可能想要使用的任何自定义信息(可选)。
Web API 将使用您配置的跟踪编写器在请求的整个生命周期中跟踪信息。您可以使用跟踪编写器来跟踪生命周期事件以及您自己的控制器代码。