diff --git a/extensions/azurecore/src/account-provider/auths/httpClient.ts b/extensions/azurecore/src/account-provider/auths/httpClient.ts index 224f3ef6b0..d3fa0c60b6 100644 --- a/extensions/azurecore/src/account-provider/auths/httpClient.ts +++ b/extensions/azurecore/src/account-provider/auths/httpClient.ts @@ -7,6 +7,7 @@ import { INetworkModule, NetworkRequestOptions, NetworkResponse } from '@azure/msal-common'; import * as http from 'http'; import * as https from 'https'; +import { TextEncoder } from 'util'; import { NetworkUtils } from './networkUtils'; /** @@ -151,9 +152,10 @@ const networkRequestViaProxy = ( // compose a request string for the socket let postRequestStringContent: string = ''; if (httpMethod === HttpMethod.POST || httpMethod === HttpMethod.PUT) { - const body = options?.body || ''; + // Note: Text Encoder is necessary here because otherwise it was not able to handle Chinese characters in table names. + const body = (new TextEncoder()).encode(JSON.stringify(options?.body || '')); postRequestStringContent = - 'Content-Type: application/x-www-form-urlencoded\r\n' + + 'Content-Type: application/json\r\n' + `Content-Length: ${body.length}\r\n` + `\r\n${body}`; } @@ -284,7 +286,8 @@ const networkRequestViaHttps = ( ): Promise> => { const isPostRequest = httpMethod === HttpMethod.POST; const isPutRequest = httpMethod === HttpMethod.PUT; - const body: string = options?.body || ''; + // Note: Text Encoder is necessary here because otherwise it was not able to handle Chinese characters in table names. + const body = (new TextEncoder()).encode(JSON.stringify(options?.body || '')); const url = new URL(urlString); const optionHeaders = options?.headers || {} as Record; let customOptions: https.RequestOptions = { @@ -319,7 +322,7 @@ const networkRequestViaHttps = ( }); } - if (isPostRequest) { + if (isPostRequest || isPutRequest) { request.write(body); } diff --git a/extensions/azurecore/src/azureResource/utils.ts b/extensions/azurecore/src/azureResource/utils.ts index 83bf3fb7cc..acb511e662 100644 --- a/extensions/azurecore/src/azureResource/utils.ts +++ b/extensions/azurecore/src/azureResource/utils.ts @@ -501,7 +501,7 @@ export async function createResourceGroup(account: AzureAccount, subscription: a const host = getProviderMetadataForAccount(account).settings.armResource.endpoint; const response = await makeHttpRequest(account, subscription, path, HttpRequestMethod.PUT, requestBody, ignoreErrors, host); return { - resourceGroup: response?.response?.data, + resourceGroup: response?.response?.body, errors: response.errors ? response.errors : [] }; } @@ -511,8 +511,8 @@ export async function getStorageAccountAccessKey(account: AzureAccount, subscrip const host = getProviderMetadataForAccount(account).settings.armResource.endpoint; const response = await makeHttpRequest(account, subscription, path, HttpRequestMethod.POST, undefined, ignoreErrors, host); return { - keyName1: response?.response?.data?.keys[0].value ?? '', - keyName2: response?.response?.data?.keys[0].value ?? '', + keyName1: response?.response?.body?.keys[0].value ?? '', + keyName2: response?.response?.body?.keys[0].value ?? '', errors: response.errors ? response.errors : [] }; }