服务器关闭时通过异常自定义 httpClient 过滤器
Custom httpClient filter through exception when server is down
我是 windows 商店应用的新手。我正在尝试向 HttpClient 添加自定义过滤器,它工作正常,但是当服务器关闭时,捕获块 return null
导致系统通过 System.AccessViolationException
。我该如何处理这种情况。
public IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request)
{
HttpResponseMessage response = new HttpResponseMessage();
return AsyncInfo.Run<HttpResponseMessage, HttpProgress>(async (cancellationToken, progress) =>
{
if ((App.userData != null && !string.IsNullOrWhiteSpace(App.userData.Token)) || App.Get_user())
{
request.Headers.Add("AuthorizationHeader", App.userData.Token);
}
try
{
response = await innerFilter.SendRequestAsync(request);
if (response.StatusCode == HttpStatusCode.Forbidden)
{
((Frame)Window.Current.Content).Navigate(typeof(LoginPage));
return response;
}
return response;
}
catch
{
return null;
}
});
}
如果是服务器故障,那么您可以使用适当的故障代码和 return 设置您的响应变量,而不是 returning null。
也就是说,HttpClient.SendRequestAsync 的上游调用者需要处理异常并且不应该与 AV 一起崩溃。 SendRequestAsync 文档中明确指出了异常处理的必要性。
我是 windows 商店应用的新手。我正在尝试向 HttpClient 添加自定义过滤器,它工作正常,但是当服务器关闭时,捕获块 return null
导致系统通过 System.AccessViolationException
。我该如何处理这种情况。
public IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress> SendRequestAsync(HttpRequestMessage request)
{
HttpResponseMessage response = new HttpResponseMessage();
return AsyncInfo.Run<HttpResponseMessage, HttpProgress>(async (cancellationToken, progress) =>
{
if ((App.userData != null && !string.IsNullOrWhiteSpace(App.userData.Token)) || App.Get_user())
{
request.Headers.Add("AuthorizationHeader", App.userData.Token);
}
try
{
response = await innerFilter.SendRequestAsync(request);
if (response.StatusCode == HttpStatusCode.Forbidden)
{
((Frame)Window.Current.Content).Navigate(typeof(LoginPage));
return response;
}
return response;
}
catch
{
return null;
}
});
}
如果是服务器故障,那么您可以使用适当的故障代码和 return 设置您的响应变量,而不是 returning null。
也就是说,HttpClient.SendRequestAsync 的上游调用者需要处理异常并且不应该与 AV 一起崩溃。 SendRequestAsync 文档中明确指出了异常处理的必要性。