在使用自定义消息处理程序时,我一直在 API 服务器端遇到以下错误:
API 控制器:-
[RoutePrefix("errors")]
public class ErrorController : ApiController
{
[HttpGet]
[Route("{id}")]
public IHttpActionResult GetClientEmailId(int id)
{
return this.Ok();
}
}
自定义消息处理程序:-
public class ApiMessageHandler: DelegatingHandler
{
protected override async Task<HttpResponseMessage>
SendAsync(HttpRequestMessage request, CancellationToken
cancellationToken)
{
var logger = LogManager.GetLogger(this.GetType().FullName);
if (logger.IsDebugEnabled)
{
var requestMessage = await
request.Content.ReadAsByteArrayAsync();
var resTask = base.SendAsync(request,
cancellationToken).ContinueWith(
t =>
{
if (t.Exception != null)
{
throw t.Exception;
}
return t.Result;
},
cancellationToken);
byte[] responseMessage;
if (resTask.Result.IsSuccessStatusCode)
{
responseMessage = resTask.Result.Content != null
? await resTask.Result.Content.ReadAsByteArrayAsync()
: Encoding.UTF8.GetBytes(resTask.Result.ReasonPhrase);
}
else
{
responseMessage = Encoding.UTF8.GetBytes(resTask.Result.ReasonPhrase);
}
await this.Log(request, requestMessage, resTask.Result,
responseMessage, logger);
return resTask.Result;
}
var response = await base.SendAsync(request, cancellationToken);
return response;
}
当我调用操作方法http://localhos:4200/errors/adf(传递字符串参数而不是整数)时,我在 Base.SendAsync 方法中得到了 System.FormatException。引发异常:mscorlib.dll 中的“System.FormatException”附加信息:输入字符串的格式不正确。
但是这个异常不是由 GlobalException Handler 处理的。
看起来 base.SendAsync 方法已经吞下了这个异常。我们如何处理这个异常并重新抛出,以便 GlobalException 处理程序可以用正确的消息处理这个异常。
先感谢您。