我想知道如何检查我所做的RestSharp请求是否因为服务器已关闭而导致其失败。
当我关闭我的服务器时,我得到状态代码“NotFound”,但可能是找不到特定记录(如果他们试图找到最近可能删除的记录,我会在我的网站上执行此操作)。 / p>
如何判断服务器实际上已关闭?
编辑
这是我的代码
private readonly RestClient client = new RestClient(GlobalVariables.ApiUrl);
var request = new RestRequest("MyController", Method.POST);
request.AddParameter("UserId", "1");
request.AddParameter("Name", name.Trim());
var asyncHandle = client.ExecuteAsync(request, response =>
{
var status = response.StatusCode;
});
答案 0 :(得分:0)
当服务器关闭时,它不应返回“404 NotFound”错误。
在这种情况下,最合适的是HTTP Error 503 - Service unavailable
Web服务器(运行Web站点)当前无法处理 由于临时过载或维护而导致的HTTP请求 服务器。这意味着这是一个暂时的条件 一段时间后会缓解。处于此状态的某些服务器可能 也简单地拒绝套接字连接,在这种情况下不同 可能会生成错误,因为套接字创建超时。
这样检查RestResponse.StatusCode
是否为503
,它会告诉您服务器已关闭。
答案 1 :(得分:0)
我遇到了同样的问题。
我决定检查ContentLength。至少我的web服务总是返回ContentLength> 0(即使对于NotFound出现)。这似乎有用了。
if ( response.StatusCode == System.Net.HttpStatusCode.NotFound &&
response.ContentLength == -1 ){
==> client couldn't connect to webservice
}
答案 2 :(得分:0)
在我的场景中,我需要检查连接是否发生了任何事情,例如连接超时,无法解析主机名等。所以我还添加了以下代码:
try
{
var client = new RestClient(_configuration.ServerUrl);
var request = new RestRequest
{
Resource = _configuration.SomeUrl,
Method = Method.POST
};
var response = client.Execute(request);
if (response.ErrorException != null)
{
throw response.ErrorException;
}
}
catch (WebException ex)
{
// TODO: check ex.Status, if it matches one of needed conditions.
}
有关WebExceptionStatus Enumeration的更多信息,请参阅以下链接https://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus(v=vs.110).aspx