如何处理“405 错误,方法不允许”。无一例外

How to handle "405 error, Method Not Allowed." without an exception

现在我正在解决一个问题,我向服务器发送了 HttpWebRequest 并检查服务器是否应答。任何意味着已到达服务器的答案对我来说都是肯定的。所以如果我会得到答案:

代码:

try
{
    var myHttpWebRequest = (HttpWebRequest)WebRequest.Create(_endPointUri);
    myHttpWebRequest.Timeout = _timeoutMs;

    var myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

    if (myHttpWebResponse.StatusCode == HttpStatusCode.OK)
        return true;
}
catch (WebException e)
{
    return e.Message.Contains("The remote server returned an error: (405) Method Not Allowed.");
}
catch (Exception e)
{
}
return false;

如何处理这种情况无一例外?

您必须处理异常,但您可以使用模式匹配和 Status 属性 on WebException(其中包含一个 WebExceptionStatus)来控制您对响应的解释更容易:

var request = HttpWebRequest.Create(uri);
request.Timeout = timeout;

try
{
    var response = (HttpWebResponse) request.GetResponse();
    return true;
}
catch (WebException connectionError) when (
    connectionError.Status == WebExceptionStatus.NameResolutionFailure ||
    connectionError.Status == WebExceptionStatus.Timeout)
{
    return false;
}
catch
{
    return true;
}

这里是 a dotnetfiddle,它使用上述代码在 4 种不同的情况下确定端点 'exists' 是否:(1) uri 可访问并且 returns 一个 'OK' 状态码,(2) uri 无法解析,(3) uri 'exists' 但超时,(4) uri 存在且returns 405.

您可以编辑异常处理中的条件模式来满足您对其他场景的要求。