如果我将客户端连接的服务指向错误的URL,为什么我的HttpStatusCode为0。
我的statusCodeAsInt显示为0.为什么它没有显示为404并正在处理?
IRestResponse response = client.Execute(restReq);
HttpStatusCode statusCode = response.StatusCode;
var statusCodeAsInt = (int) statusCode;
if (statusCodeAsInt >= 500)
{
throw new InvalidOperationException("A server error occurred: " + response.ErrorMessage, response.ErrorException);
}
if (statusCodeAsInt >= 400)
{
throw new InvalidOperationException("Request could not be understood by the server: " + response.ErrorMessage,
response.ErrorException);
}
处理此RestResponse的正确方法是什么?
答案 0 :(得分:12)
响应代码0通常表示响应为空 - 即甚至没有返回标题。
这通常在接受连接时发生,然后正常关闭,也称为FIN连接。这是服务器声明已完成广播的地方,但会继续收听新消息。 可能是防火墙问题。
要做的另一件事是将IRestResponse
更改为RestResponse
。在这种情况下,使用IRestResponse没有任何优势。
答案 1 :(得分:6)
对于我来说,这不是引起StatusCode为0的防火墙问题。我们使用的是旧版应用,该应用在阻止TLS 1.0连接的服务器上仍在使用TLS 1.0。启用TLS 1.2后,我们将获得预期的状态代码。
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
答案 2 :(得分:5)
我认为状态码0表示没有状态码。这也可能意味着错误出在RestSharp中,而不是响应中。状态码为0时,甚至可能没有发送过请求。
检查是否有.ErrorException / .ErrorMessage。
答案 3 :(得分:0)
就我而言,我只是指定了无效的主机名。
答案 4 :(得分:0)
就我而言,使用证书身份验证,配置的证书是错误的。希望对您有所帮助。
答案 5 :(得分:0)
我从防火墙后面的服务器收到间歇性响应0。 以下代码解决了我的问题
client.ConfigureWebRequest((r) =>
{
r.ServicePoint.Expect100Continue = false;
r.KeepAlive = true;
});
答案 6 :(得分:0)
您可以在Windows窗体上尝试此操作:
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
谢谢@ KJ3
答案 7 :(得分:0)
如果这条线不起作用
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
那就试试这个
System.Net.ServicePointManager.ServerCertificateValidationCallback = (senderX, certificate, chain, sslPolicyErrors) => { return true; };
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
这应该有效。
如果我在发布请求期间收到 StatusCode 0 问题,那么我使用这两行代码。
答案 8 :(得分:0)
HttpStatusCode 由处理您的 HTTP 请求的服务器/服务设置。如果您发出的请求无法解析为有效的服务器/服务(错误的 URL、端口、安全协议等),您将无法访问处理该请求的 Http 请求处理器,并且没有执行代码来设置HttpStatusCode - 因此整数类型的默认值为 0。如果您试图捕捉这种情况,请确保您捕捉到客户端请求(在客户端代码中)的超时异常,并将 Httpcode 设置为告诉您发生了什么的内容。我喜欢 HttpStatusCode 503 或 504(服务不可用或网关超时),尽管服务器可以出于其他原因使用这些代码进行响应,因此它们有点不明确。否则,只需将 0 的 Httpcode 视为由于某些与网络相关的原因(再次像没有有效的 URL)而无法到达服务器/服务。