ASP. NET Базовый Web Api и PowerShell Invoke-RestMethod (публикация метода) плюс ResponseText / ReturnValue / ErrorMessage - PullRequest
1 голос
/ 03 мая 2020

В настоящее время я разрабатываю ASP. NET Core Web API (v3.1) (плюс сценарий PowerShell).

Контроллер

[Route("api/[controller]")]
[ApiController]
public class RegisterDeviceController : ControllerBase
{
    private readonly SCMDB _context;

    public RegisterDeviceController(SCMDB context)
    {
        _context = context;
    }

    // POST: api/RegisterDevice
    [HttpPost]
    public async Task<ActionResult<Device>> PostDevice(Device device)
    {
        if (device.SiteKey == null)
            return StatusCode(406,"NoSiteKeyDefined!");
        return null;
    }
}

«Потребителем» является сценарий PowerShell:

# Post to web api
try{
    $response = Invoke-RestMethod -Uri "$ScmWebApiUrl" -Method Post -Body $JsonString -ContentType "application/json"
    }
    catch {
        $err = $_.Exception
    }

Write-Host $ErrResp

Я пытаюсь выяснить: как получить ResponseText "NoSiteKeyDefined!" в PowerShell.

Я получаю:

[DBG]: PS C:\Windows\system32>> $err.Message
The remote server returned an error: (406) Not Acceptable.

Но мне также нужно сообщение (в данном случае -> NoSiteKeyDefined!)

Это не должен быть код ошибки 406 также может быть другим «ActionResult» или ответом. Я также попытался вернуть BadRequest («NoSiteKeyDefined!»), Но я не нахожу этот фрагмент сообщения ни в $ response, ни в объекте $ err. Важно то, что я могу передать сообщение, которое можно получить и обработать в сценарии PowerShell.

1 Ответ

0 голосов
/ 04 мая 2020

То, что я пытаюсь выяснить, это: как получить ResponseText "NoSiteKeyDefined!" в PowerShell

я могу воспроизвести ту же проблему при доступе к свойству Exception с $_.Exception, которое включает подробное сообщение WebException.

Чтобы получить значение 'NoSiteKeyDefined!', которое мы установили, мы можем получить к нему доступ, используя Write-Host $_ напрямую, как показано ниже.

try{
    $ScmWebApiUrl = 'https://xxxx/api/RegisterDevice'

    $Body = @{
         SiteKey = $NULL
    }

    $JsonString = $Body | ConvertTo-Json

    $response = Invoke-RestMethod -Uri "$ScmWebApiUrl"  -Method Post -Body $JsonString -ContentType 'application/json'
}
catch{
    Write-Host $_
    Write-Host $_.Exception
}

Результат теста

enter image description here

...