Как обработать «ошибка 405, метод не разрешен». без исключения - PullRequest
0 голосов
/ 21 марта 2020

Сейчас я решаю проблему, которую я сделал 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;

Как справиться с этой ситуацией без каких-либо исключений?

1 Ответ

0 голосов
/ 22 марта 2020

Вам придется обработать исключение, но вы можете использовать сопоставление с образцом и свойство Status в 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;
}

Вот dotnetfiddle , который использует вышеуказанный код, чтобы определить, существует ли конечная точка в 4 различных сценариях ios: (1) URI доступен и возвращает код состояния «ОК», (2) URI не может быть разрешен, (3) URI «существует», но время истекло, и (4) URI существует и возвращает 405.

Вы можете редактировать условные шаблоны в обработке исключений, чтобы заполнить ваши требования для дополнительного сценария ios.

...