私はすべてのリクエストを自動的に記録したいと思います。以前の.Net Framwork WebAPIプロジェクトでは、私はdelegateHandlerを登録していました。ログの内容の.NET Core WebAPIのすべての要求を自動ログに記録する方法は?
WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
config.MessageHandlers.Add(new AutoLogDelegateHandler());
}
AutoLogDelegateHandler.cs
public class AutoLogDelegateHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var requestBody = request.Content.ReadAsStringAsync().Result;
return await base.SendAsync(request, cancellationToken)
.ContinueWith(task =>
{
HttpResponseMessage response = task.Result;
//Log use log4net
_LogHandle(request, requestBody, response);
return response;
});
}
}
例:
------------------------------------------------------
2017-08-02 19:34:58,840
uri: /emp/register
body: {
"timeStamp": 1481013427,
"id": "0322654451",
"type": "t3",
"remark": "system auto reg"
}
response: {"msg":"c556f652fc52f94af081a130dc627433","success":"true"}
------------------------------------------------------
しかし、.NETのコアWebAPIのプロジェクトでは、何のWebApiConfig
はありません、またはGlobal.asaxのレジスタ関数GlobalConfiguration.Configure(WebApiConfig.Register);
.NET Core WebAPIでこれを達成する方法はありますか?
はい、それは動作します。私は 'AutoLogAttribute'を作成し、すべてのリクエストを' OnActionExecuted'に記録します。 StartupクラスのConfigureServicesメソッドのMvcOptions.Filtersコレクションにフィルターを追加して、フィルターをグローバルに登録します。 – wtf512
恐ろしいですが、うまくいきました – Eedoh
正解は、すでにあなたのために記録されています。 – davidfowl