Результат вывода Печать успешно завершена и завершилась с ошибкой без исключения - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь напечатать код состояния 200/401 в успешных и неудачных сценариях.

Мой сценарий работает с кодом состояния 200. Но если я хочу, чтобы мой токен не удался, $StatusCode не печатает 401.

Мне нужны некоторые предложения для печати кода состояния в обоих сценариях передачиодин параметр.

$StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode) "работает только для кода состояния 200.

if ($response = (Invoke-WebRequest @Params -ErrorAction Stop)) {
    try {
        $Token = (($response.Content) | ConvertFrom-Json).Token
    } catch [System.Net.WebException] {
        $StatusCode = "Status Code: $($_.Exception.Response.StatusCode.Value__) ";
        $Message = " Message: $($_.Exception.Message)"
    }
} 

$StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode)"

Мой $StatusCode должен работать для 200 и 401.

1 Ответ

1 голос
/ 07 ноября 2019

Во-первых, ошибки, выданные Invoke-WebRequest, никогда не обнаруживаются в вашем коде. Кроме того, последняя строка вашего фрагмента кода заменяет все, что блок catch мог бы присвоить $StatusCode. Переместите оба оператора в блок try. И я бы добавил еще catch для обработки других исключений, которые могут возникнуть.

Измените это:

if ($response = (Invoke-WebRequest @Params -ErrorAction Stop)) {
    try {
        $Token = (($response.Content) | ConvertFrom-Json).Token
    } catch [System.Net.WebException] {
        $StatusCode = "Status Code: $($_.Exception.Response.StatusCode.Value__) ";
        $Message = " Message: $($_.Exception.Message)"
    }
}

$StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode)"

на это:

try {
    $response = (Invoke-WebRequest @Params -ErrorAction Stop)
    $Token = (($response.Content) | ConvertFrom-Json).Token
    $StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode)"
} catch [System.Net.WebException] {
    $StatusCode = "Status Code: $($_.Exception.Response.StatusCode.Value__) "
    $Message = " Message: $($_.Exception.Message)"
} catch {
    $StatusCode = 0
    $Message = " Message: $($_.Exception.Message)"
    # alternatively re-throw the exception by uncommenting below line
    #throw
}

Если вы хотитетолько коды состояния 200 и 401, но ни на одном другом вы не могли бы сделать что-то вроде этого:

try {
    $response = (Invoke-WebRequest @Params -ErrorAction Stop)
    $Token = (($response.Content) | ConvertFrom-Json).Token
    $StatusCode = "Status Code: $([int]$response.BaseResponse.statusCode)"
} catch [System.Net.WebException] {
    if ($_.Exception.Response.StatusCode.Value__ -eq 401) {
        $StatusCode = "Status Code: $($_.Exception.Response.StatusCode.Value__) "
        $Message = " Message: $($_.Exception.Message)"
    } else {
        throw
    }
} catch {
    throw
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...