Asp.net web api .NET Web Api日志记录响应主体
我正在尝试使用DelegatingHandler记录Web Api响应主体Asp.net web api .NET Web Api日志记录响应主体,asp.net-web-api,Asp.net Web Api,我正在尝试使用DelegatingHandler记录Web Api响应主体 protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { return base.SendAsync(reques
protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
return base.SendAsync(request, cancellationToken).ContinueWith(task =>
{
var response = task.Result;
LogResponseLoggingInfo(response);
return response;
});
}
private void LogResponseLoggingInfo(HttpResponseMessage response)
{
string responseBody = string.Empty;
if (response.Content != null)
{
responseBody = response.Content.ReadAsStringAsync().Result;
//WriteToLogFile(responseBody);
}
}
受保护的覆盖System.Threading.Tasks.Task SendAsync(HttpRequestMessage请求,System.Threading.CancellationToken CancellationToken)
{
返回base.sendaync(请求,取消令牌).ContinueWith(任务=>
{
var response=task.Result;
LogResponseLogginInfo(响应);
返回响应;
});
}
专用无效日志响应LogginInfo(HttpResponseMessage响应)
{
string responseBody=string.Empty;
if(response.Content!=null)
{
responseBody=response.Content.ReadAsStringAsync().Result;
//写入日志文件(响应库);
}
}
只要对Web Api的调用返回响应,它就可以正常工作。StatusCode等于HttpStatusCode.OK
但是,任何返回任何其他状态代码(例如未经授权)的调用都会导致正确响应401仅在每次其他调用时正确返回
其他时候,我收到一个500响应,内部服务器错误
使用Fiddler查看500个错误的原始响应显示,带有服务器的HTML文档在发送HTTP头后无法追加头
如果我注释掉responseBody=response.Content.ReadAsStringAsync().Result行,每次都成功返回正确的401错误响应
有人知道导致错误的原因以及如何修复吗?尝试将处理程序改为使用async/await:
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
{
var response = await base.SendAsync(request, cancellationToken);
await LogResponseLoggingInfo(response);
return response;
}
private async Task LogResponseLoggingInfo(HttpResponseMessage response)
{
string responseBody = string.Empty;
if (response.Content != null)
{
responseBody = await response.Content.ReadAsStringAsync();
//WriteToLogFile(responseBody);
}
}
protected override async Task sendaync(HttpRequestMessage请求,System.Threading.CancellationToken CancellationToken)
{
var response=await base.sendaync(请求、取消令牌);
等待LogResponseLogginInfo(响应);
返回响应;
}
专用异步任务LogResponseLogginInfo(HttpResponseMessage响应)
{
string responseBody=string.Empty;
if(response.Content!=null)
{
responseBody=wait response.Content.ReadAsStringAsync();
//写入日志文件(响应库);
}
}
不要使用.ContinueWith和.Result,因为如果使用async/Wait,您将不需要它。这里有一些更多的信息:我修改了处理程序以使用上面的异步/等待代码,但我仍然得到相同的错误。只添加了这个处理程序,就可以在新的Web API项目上轻松复制错误。嗯,我无法重现这个问题。代码是否仍在
wait response.Content.ReadAsStringAsync()处引发异常代码>?