0
使用ASP.NET WebAPI 2.0並有一個概念性問題。WebAPI 2.0呼叫監測
想保留任何用戶/客戶端調用的任何API的全局記錄,如果這存儲在數據庫中,那將是非常棒的。
什麼是最好的機制來完成這個?
使用ASP.NET WebAPI 2.0並有一個概念性問題。WebAPI 2.0呼叫監測
想保留任何用戶/客戶端調用的任何API的全局記錄,如果這存儲在數據庫中,那將是非常棒的。
什麼是最好的機制來完成這個?
我'使用DelegatingHandler
長時間在幾個項目中做得很好。
public class ApiCallLogHandler : DelegatingHandler {
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
var started = DateTime.UtcNow;
HttpResponseMessage response = null;
Exception baseException = null;
try {
response = await base.SendAsync(request, cancellationToken);
} catch(Exception exception) {
CommonLogger.Logger.LogError(exception);
baseException = exception;
}
try {
var callModel = await GetCallModelAsync(request, response);
if(baseException != null)
callModel.Exception = baseException
callModel.ExecutionTime = (DateTime.UtcNow - started).ToString();
await CommonLogger.Logger.LogApiCallAsync(callModel);
} catch (Exception exception) {
CommonLogger.Logger.LogError(exception);
}
return response;
}
private async Task<ApiCallModel> GetCallModelAsync(HttpRequestMessage request, HttpResponseMessage response) {
// parse request and response and create a model to store in database...
}
}
通過這種方法,你可以跟蹤執行過程中的所有請求,例外,每個API調用的甚至是全響應。
ApiCallModel
只是一個簡單的POCO類,您應該填寫您的請求和響應所需的數據。
CommonLogger.Logger.*
是您的記錄機制。
而且,你必須在這個片段中註冊的處理程序:
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
config.MessageHandlers.Add(new ApiCallLogHandler());
}
}
由於這是偉大的,我將如何能夠將數據保存在數據庫中? – user1144596
@ user1144596我不明白):在'CommonLogget.Logger。*'中執行或者只是一個自定義方法。您可以使用EF或NH或ASO.NET或任何其他您想要的機制。你能更具體嗎? –
啊,我明白你的意思了。謝謝 – user1144596