簡體   English   中英

我如何在ASP.NET Web API中記錄原始HTTP請求,而不管它是否路由到控制器?

[英]How do I log the raw HTTP request in ASP.NET Web API whether or not it routes to a controller?

是否可以記錄對ASP.NET Web API發出的每個HTTP請求,即使該請求的格式有誤,還是由於某些其他原因而無法路由到其中一個控制器。

例如,如果POST方法將Order模型作為參數,則錯誤的請求將阻止其到達控制器的POST方法。 我想提醒某人,以便可以采取措施防止將來的失敗。

有沒有辦法在控制器的上游捕獲這些請求?

使用跟蹤,都需要實現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中的每個跟蹤在ASP.NET Web API中啟用跟蹤,則內置跟蹤基礎結構將記錄您所需要的信息。

如果格式錯誤的請求使內容協商失敗,您將在DefaultContentNegotiator中看到HttpError發生。

這是這種錯誤的簡單跟蹤示例:

DefaultContentNegotiator; Negotiate; Type ='HttpError',formatters = [JsonMediaTypeFormatterTracer,XmlMediaTypeFormatterTracer,FormUrlEncodedMediaTypeFormatterTracer,FormUrlEncodedMediaTypeFormatterTracer]

跟蹤編寫器將獲得一個TraceRecord作為其輸入,它將包含請求信息以及您可能想要使用的任何自定義信息(可選)。

Web API將使用您配置的跟蹤編寫器在請求的整個生命周期中跟蹤信息。 您可以使用跟蹤編寫器來跟蹤生命周期事件以及您自己的控制器代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM