如何处理“405 错误,方法不允许”。无一例外
How to handle "405 error, Method Not Allowed." without an exception
现在我正在解决一个问题,我向服务器发送了 HttpWebRequest
并检查服务器是否应答。任何意味着已到达服务器的答案对我来说都是肯定的。所以如果我会得到答案:
- HttpStatusCode.OK(我没问题)
- 405 方法不允许(我没问题)。
代码:
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.
您可以编辑异常处理中的条件模式来满足您对其他场景的要求。
现在我正在解决一个问题,我向服务器发送了 HttpWebRequest
并检查服务器是否应答。任何意味着已到达服务器的答案对我来说都是肯定的。所以如果我会得到答案:
- HttpStatusCode.OK(我没问题)
- 405 方法不允许(我没问题)。
代码:
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.
您可以编辑异常处理中的条件模式来满足您对其他场景的要求。