【发布时间】:2014-10-27 13:12:58
【问题描述】:
我正在尝试使用 DelegatingHandler 记录 Web Api 响应正文。
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);
}
}
只要对 Web Api 的调用返回响应,它就可以正常工作。StatusCode 等于 HttpStatusCode.OK。
但是,任何返回任何其他 StatusCode 的调用(例如 Unauthorized)都会导致正确的响应 401 仅在所有其他调用中正确返回。
其他时候,我收到 500 响应,内部服务器错误。
使用 Fiddler 查看 500 错误的原始响应显示 HTML 文档带有 Server cannot append header after HTTP headers have been sent 消息。
如果我注释掉responseBody = response.Content.ReadAsStringAsync().Result;这一行,每次都会成功返回正确的401错误响应。
有人知道导致错误的原因以及如何解决吗?
【问题讨论】:
标签: asp.net-web-api