We are using AzureCLI to be able to call an Azure Function endpoint upon a successful deployment. The call to get token works and the call to our azure function makes it into MyFunction.
The problem is the format of the body when it arrives.
If we include the -Compress for ConvertTo-Json, the body arrives like {ResourceId:3,BuildPipelineName:ResourceName}
and System.Text.Json.JsonSerializer.Deserialize throws 'R' is an invalid start of a property name. Expected a '"'. LineNumber: 0 | BytePositionInLine: 1.
If we don't include the -Compress for ConvertTo-Json, the body arrives like {
and throws Expected depth to be zero at the end of the JSON payload. There is an open JSON object or array that should be closed. LineNumber: 0 | BytePositionInLine: 1.
runOnce:
deploy:
steps:
- template: ./deployment.yml
on: # On success or failure hook for runOnce deployment strategy
success: # Runs on success of all of the steps
steps:
- task: AzureCLI@2
inputs:
azureSubscription: 'MyServiceConnectionName'
scriptType: ps
scriptLocation: inlineScript
inlineScript: |
$functionKeys = az functionapp function keys list -g my-resource-group -n my-azure-function-name --function-name MyFunction | ConvertFrom-Json
$defaultKey = $functionKeys.default
$body = @{
ResourceId="$(Environment.ResourceId)";
ResourceName="$(Environment.ResourceName)";
} | ConvertTo-Json -Compress
echo body: $body
$url2 = "https://my-azure-function-name.azurewebsites.net/api/MyFunction?code=$defaultKey"
$response = az rest --method post --uri $url2 --skip-authorization-header --verbose --body $body
echo response: $response
We've tried adding the following json options to JsonSerializer.Deserialize but with no change in behavior
var jsonOptions = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true,
ReadCommentHandling = JsonCommentHandling.Skip,
AllowTrailingCommas = true,
NumberHandling = JsonNumberHandling.AllowReadingFromString
};
We've also tried changing the body creation to be a single line like:
$body = @{ResourceId="$(Environment.ResourceId)";ResourceName="$(Environment.ResourceName)" } | ConvertTo-Json -Compress
We are new to both PowerShell and .NET6. We will gladly attempt changes on either side. Anything that may make this request succeed will be much appreciated.
Thank you for sharing your hard earned knowledge.