[Web API]取得傳入API的Body內容
當我們呼叫Web Api時,通常會用JSON字串來傳遞資料,Web Api再建立物件接收JSON,假設寫好的Web API如下,當傳入的JSON字串無法正確轉成GetClass
物件時,就會取得一個null
物件。
//接收JSON字串並自動轉成GetClass物件
public string GET(GetClass pInput)
{
//資料處理...
return "";
}
此時就需要將傳入的原始字串記錄下來,以便確認傳入的內容為何,作法如下:
建立新Handler繼承DelegatingHandler,覆寫SendAsync攔截傳入的HttpRequestMessage內容,將內容以非同步的方式,取得Body中的文字後記錄到文字檔備查。
//記錄呼叫API傳過來的body中字串(JSON data)
public class LogRequestAndResponseHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
// log request body
if (request.Content != null)
{
request.Content.ReadAsByteArrayAsync().ContinueWith(
(task) =>
{
var bodyStr = System.Text.UTF8Encoding.UTF8.GetString(task.Result);
//將取得的內容記錄到文字檔中;
});
}
return base.SendAsync(request, cancellationToken); //call the base
}
}
於WebApiConfig.cs中註冊新建好的Handler即可。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MessageHandlers.Add(new LogRequestAndResponseHandler());
}
}