【发布时间】:2016-09-14 22:22:04
【问题描述】:
我有一个 Web API,当传入的请求无效时,API 会发回一个 HttpStatusCode.BadRequest,并且 API 还会将 CorrelationId 添加到响应的 HttpHeader 中。类似下面的东西
public class ValidateRequestAttribute : ActionFilterAttribute
{
public ValidateRequestAttribute()
{
}
public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.ModelState.IsValid == false)
{
context.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest;
context.HttpContext.Response.Headers.Add("x-correlationid", "someid");
context.Result = new ContentResult()
{
Content = "bad request."
};
}
}
}
在客户端我使用 HttpClient 访问 API。我不确定客户端如何在这里检索 HttpStatusCode 和 HttpHeader。这是我的客户代码
public bool Process(url)
{
bool result = false;
try
{
Task.Run(async () => await _httpClient.GetStringAsync(url).ConfigureAwait(false)).Result;
}
catch (Exception ex)
{
if(ex is AggregateException)
{
var aggregateException = ex as AggregateException;
foreach(var innerException in aggregateException.InnerExceptions)
{
if (innerException is HttpRequestException)
{
var httpRequestException = innerException as HttpRequestException;
// how do i get StatusCode and HttpHeader values here??
}
}
}
}
return result;
}
我已经浏览过 SO 帖子 here 和 MSDN 文章 here 以及 Stephen Cleary 的文章 here
即使它建议一直进行异步,但在这种情况下,客户端和 API 都彼此断开连接,并且客户端是同步的。注意Client的Process方法是同步方法。
【问题讨论】:
标签: asp.net-web-api async-await