Skip to content
Merged
  •  
  •  
  •  
13 changes: 10 additions & 3 deletions sdk/storage/azblob/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
# Release History

## 0.3.0 (Unreleased)

### Features Added
## 0.3.0 (2022-02-09)

### Breaking Changes
* Updated to latest `azcore`. Public surface area is unchanged.
* [#16978](https://github.com/Azure/azure-sdk-for-go/pull/16978): The `DownloadResponse.Body` parameter is now `*RetryReaderOptions`.

### Bugs Fixed
* Fixed Issue #16193 : `azblob.GetSASToken` wrong signed resource.
* Fixed Issue #16223 : `HttpRange` does not expose its fields.
* Fixed Issue #16254 : Issue passing reader to upload `BlockBlobClient`
* Fixed Issue #16295 : Problem with listing blobs by using of `ListBlobsHierarchy()`
* Fixed Issue #16542 : Empty `StorageError` in the Azurite environment
* Fixed Issue #16679 : Unable to access Metadata when listing blobs
* Fixed Issue #16816 : `ContainerClient.GetSASToken` doesn't allow list permission.
* Fixed Issue #16988 : Too many arguments in call to `runtime.NewResponseError`

### Other Changes

Expand Down
104 changes: 78 additions & 26 deletions sdk/storage/azblob/README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Azure Storage Blob SDK for Go
# Azure Blob Storage SDK for Go

## Introduction

The Microsoft Azure Storage SDK for Go allows you to build applications that takes advantage of Azure's scalable cloud storage.
This SDK replaces the previously previewed [azblob package](https://github.com/azure/azure-storage-blob-go).
The Microsoft Azure Storage SDK for Go allows you to build applications that takes advantage of Azure's scalable cloud storage.
This is the new beta client module for Azure Blob Storage, which follows our [Azure SDK Design Guidelines for Go](https://azure.github.io/azure-sdk/golang_introduction.html) and replaces the previous beta [azblob package](https://github.com/azure/azure-storage-blob-go).

## Getting Started

Expand All @@ -12,18 +12,74 @@ The Azure Blob SDK can access an Azure Storage account.
### Prerequisites

* Go versions 1.16 or higher
* You must have an [Azure storage account][azure_storage_account]
* You must have an [Azure storage account][azure_storage_account]. If you need to create one, you can use the [Azure Cloud Shell](https://shell.azure.com/bash) to create one with these commands (replace `my-resource-group` and `mystorageaccount` with your own unique names):
(Optional) if you want a new resource group to hold the Storage Account:
```
az group create --name my-resource-group --location westus2
```
Create the storage account:
```
az storage account create --resource-group my-resource-group --name mystorageaccount
```

The storage account name can be queried with:
```
az storage account show -n mystorageaccount -g my-resource-group --query "primaryEndpoints.blob"
```
You can set this as an environment variable with:
```bash
# PowerShell
$ENV:AZURE_STORAGE_ACCOUNT_NAME="mystorageaccount"
# bash
export AZURE_STORAGE_ACCOUNT_NAME="mystorageaccount"
```

Query your storage account keys:
```
az storage account keys list --resource-group my-resource-group -n mystorageaccount
```

Output:
```json
[
{
"creationTime": "2022-02-07T17:18:44.088870+00:00",
"keyName": "key1",
"permissions": "FULL",
"value": "..."
},
{
"creationTime": "2022-02-07T17:18:44.088870+00:00",
"keyName": "key2",
"permissions": "FULL",
"value": "..."
}
]
```

```bash
# PowerShell
$ENV:AZURE_STORAGE_ACCOUNT_KEY="<mystorageaccountkey>"
# Bash
export AZURE_STORAGE_ACCOUNT_KEY="<mystorageaccountkey>"
```
> You can obtain your account key from the Azure Portal under the "Access Keys" section on the left-hand pane of your storage account.

#### Create account

* To create a new Storage account, you can use [Azure Portal][azure_portal_create_account], [Azure PowerShell][azure_powershell_create_account], or [Azure CLI][azure_cli_create_account].

### Install the package
* Install the Azure blob storage for Go with `go get`:
```bash
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
```

* Install the Azure Blob Storage client module for Go with `go get`:
```bash
go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
```

> Optional: If you are going to use AAD authentication, install the `azidentity` package:
```bash
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity
```

#### Create the client

`azblob` allows you to interact with three types of resources :-
Expand All @@ -32,13 +88,13 @@ The Azure Blob SDK can access an Azure Storage account.
* [Containers](https://azure.microsoft.com/en-in/overview/what-is-a-container/#overview) within those storage accounts.
* [Blobs](https://azure.microsoft.com/en-in/services/storage/blobs/#overview) (block blobs/ page blobs/ append blobs) within those containers.

Interaction with these resources starts with an instance of a [client](#clients).
To create a client object, you will need the account's blob service endpoint URL and a credential that allows you to access the account.
Interaction with these resources starts with an instance of a [client](#clients).
To create a client object, you will need the account's blob service endpoint URL and a credential that allows you to access the account.
The `endpoint` can be found on the page for your storage account in the [Azure Portal][azure_portal_account_url] under the "Access Keys" section or by running the following Azure CLI command:

```bash
# Get the blob service URL for the account
az storage account show -n mystorageaccount -g MyResourceGroup --query "primaryEndpoints.blob"
az storage account show -n mystorageaccount -g my-resource-group --query "primaryEndpoints.blob"
```

Once you have the account URL, it can be used to create the service client:
Expand All @@ -53,7 +109,7 @@ For more information about blob service URL's and how to configure custom domain

#### Types of credentials

The azblob clients support authentication via Shared Key Credential, Connection String, Shared Access Signature,
The azblob clients support authentication via Shared Key Credential, Connection String, Shared Access Signature,
or any of the `azidentity` types that implement the `azcore.TokenCredential` interface.

##### 1. Creating the client from a shared key
Expand All @@ -63,7 +119,7 @@ be found in your storage account in the [Azure Portal][azure_portal_account_url]
running the following Azure CLI command:

```bash
az storage account keys list -g MyResourceGroup -n MyStorageAccount
az storage account keys list -g my-resource-group -n mystorageaccount
```

Use Shared Key authentication as the credential parameter to authenticate the client:
Expand All @@ -76,12 +132,12 @@ handle(err)

##### 2. Creating the client from a connection string

You can use connection string, instead of providing the account URL and credential separately, for authentication as well.
To do this, pass the connection string to the client's `NewServiceClientFromConnectionString` method.
You can use connection string, instead of providing the account URL and credential separately, for authentication as well.
To do this, pass the connection string to the client's `NewServiceClientFromConnectionString` method.
The connection string can be found in your storage account in the [Azure Portal][azure_portal_account_url] under the "Access Keys" section or with the following Azure CLI command:

```bash
az storage account show-connection-string -g MyResourceGroup -n MyStorageAccount
az storage account show-connection-string -g my-resource-group -n mystorageaccount
```

```golang
Expand All @@ -91,8 +147,7 @@ serviceClient, err := azblob.NewServiceClientFromConnectionString(connStr, nil)

##### 3. Creating the client from a SAS token

To use a [shared access signature (SAS) token][azure_sas_token], provide the token as a string.
If your account URL includes the SAS token, replace credential parameter with `azcore.NewAnonymousCredential()`.
To use a [shared access signature (SAS) token][azure_sas_token], provide the token as a string.
You can generate a SAS token from the Azure Portal under [Shared access signature](https://docs.microsoft.com/rest/api/storageservices/create-service-sas) or use
the `ServiceClient.GetSASToken` or `ContainerClient.GetSASToken()` methods.

Expand All @@ -106,13 +161,10 @@ handle(err)
accountSAS, err := serviceClient.GetSASToken(AccountSASResourceTypes{Object: true, Service: true, Container: true},
AccountSASPermissions{Read: true, List: true}, AccountSASServices{Blob: true}, time.Now(), time.Now().Add(48*time.Hour))
handle(err)
urlToSend := fmt.Sprintf("https://%s.blob.core.windows.net/?%s", accountName, accountSAS)
// You can hand off this URL to someone else via any mechanism you choose.

// ******************************************
sasURL := fmt.Sprintf("https://%s.blob.core.windows.net/?%s", accountName, accountSAS)

// When someone receives the URL, they can access the resource using it in code like this, or a tool of some variety.
serviceClient, err = NewServiceClientWithNoCredential(urlToSend, nil)
// The sasURL can be used to authenticate a client without need for a credential
serviceClient, err = NewServiceClientWithNoCredential(sasURL, nil)
handle(err)
```

Expand Down Expand Up @@ -156,7 +208,7 @@ Three different clients are provided to interact with the various components of
service, err := NewServiceClientWithSharedKey(fmt.Sprintf("https://%s.blob.core.windows.net/", accountName), cred, nil)
handle(err)

// All operations in the Azure Storage Blob SDK for Go operate on a context.Context, allowing you to control cancellation/timeout.
// All operations in the Azure Blob Storage SDK for Go operate on a context.Context, allowing you to control cancellation/timeout.
ctx := context.Background() // This example has no expiry.

// This example showcases several common operations to help you get started, such as:
Expand Down
6 changes: 3 additions & 3 deletions sdk/storage/azblob/doc.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ The azblob package allows you to interact with three types of resources :-
* Containers within those storage accounts.
* Blobs (block blobs/ page blobs/ append blobs) within those containers.

The Azure Storage Blob (azblob) client library for Go allows you to interact with each of these components through the use of a dedicated client object.
The Azure Blob Storage (azblob) client library for Go allows you to interact with each of these components through the use of a dedicated client object.
To create a client object, you will need the account's blob service endpoint URL and a credential that allows you to access the account.

Types of Credentials
Expand Down Expand Up @@ -137,15 +137,15 @@ Examples
service, err := NewServiceClient(fmt.Sprintf("https://%s.blob.core.windows.net/", accountName), cred, nil)
handle(err)

// All operations in the Azure Storage Blob SDK for Go operate on a context.Context, allowing you to control cancellation/timeout.
// All operations in the Azure Blob Storage SDK for Go operate on a context.Context, allowing you to control cancellation/timeout.
ctx := context.Background() // This example has no expiry.

// This example showcases several common operations to help you get started, such as:

// ===== 1. Creating a container =====

// First, branch off of the service client and create a container client.
container := service.NewContainerClient("myContainer")
container := service.NewContainerClient("mycontainer")
// Then, fire off a create operation on the container client.
// Note that, all service-side requests have an options bag attached, allowing you to specify things like metadata, public access types, etc.
// Specifying nil omits all options.
Expand Down
2 changes: 1 addition & 1 deletion sdk/storage/azblob/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ module github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
go 1.16

require (
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.0
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1
github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dnaeon/go-vcr v1.2.0 // indirect
Expand Down
2 changes: 2 additions & 0 deletions sdk/storage/azblob/go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.0 h1:8wVJL0HUP5yDFXvotdewORTw7Yu88JbreWN/mobSvsQ=
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.0/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM=
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA=
github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1/go.mod h1:fBF9PQNqB8scdgpZ3ufzaLntG0AG7C1WjPMsiFOmfHM=
github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk=
github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3/go.mod h1:KLF4gFr6DcKFZwSuH8w8yEK6DpFl3LP5rhdvAb7Yz5I=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
Expand Down
2 changes: 1 addition & 1 deletion sdk/storage/azblob/highlevel.go
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ func (b BlobClient) DownloadBlobToWriterAt(ctx context.Context, offset int64, co
if err != nil {
return err
}
body := dr.Body(o.RetryReaderOptionsPerBlock)
body := dr.Body(&o.RetryReaderOptionsPerBlock)
if o.Progress != nil {
rangeProgress := int64(0)
body = streaming.NewResponseProgress(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ interactions:
Content-Type:
- application/xml
User-Agent:
- azsdk-go-azblob/v0.1.0 azsdk-go-azcore/v0.19.0 (go1.16.7; Windows_NT)
- azsdk-go-azblob/v0.3.0 azsdk-go-azcore/v0.21.0 (go1.16.7; Windows_NT)
X-Ms-Date:
- Sat, 11 Sep 2021 08:43:27 GMT
- Mon, 07 Feb 2022 06:12:47 GMT
X-Ms-Version:
- "2019-12-12"
url: https://azureblobstoragecanada.blob.core.windows.net/?comp=properties&restype=service
Expand All @@ -27,11 +27,11 @@ interactions:
Content-Length:
- "0"
Date:
- Sat, 11 Sep 2021 08:43:28 GMT
- Mon, 07 Feb 2022 06:12:47 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
X-Ms-Request-Id:
- ea50ccd0-701e-002b-41e9-a64219000000
- b580cccc-c01e-0037-45e9-1b5dd4000000
X-Ms-Version:
- "2019-12-12"
status: 202 Accepted
Expand All @@ -46,9 +46,9 @@ interactions:
Authorization:
- sanitized
User-Agent:
- azsdk-go-azblob/v0.1.0 azsdk-go-azcore/v0.19.0 (go1.16.7; Windows_NT)
- azsdk-go-azblob/v0.3.0 azsdk-go-azcore/v0.21.0 (go1.16.7; Windows_NT)
X-Ms-Date:
- Sat, 11 Sep 2021 08:43:59 GMT
- Mon, 07 Feb 2022 06:13:19 GMT
X-Ms-Version:
- "2019-12-12"
url: https://azureblobstoragecanada.blob.core.windows.net/?comp=properties&restype=service
Expand All @@ -59,11 +59,11 @@ interactions:
Content-Type:
- application/xml
Date:
- Sat, 11 Sep 2021 08:43:58 GMT
- Mon, 07 Feb 2022 06:13:49 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
X-Ms-Request-Id:
- ea510152-701e-002b-0ce9-a64219000000
- 8d7f9cd0-b01e-004f-07e9-1bfe2c000000
X-Ms-Version:
- "2019-12-12"
status: 200 OK
Expand All @@ -82,9 +82,9 @@ interactions:
Content-Type:
- application/xml
User-Agent:
- azsdk-go-azblob/v0.1.0 azsdk-go-azcore/v0.19.0 (go1.16.7; Windows_NT)
- azsdk-go-azblob/v0.3.0 azsdk-go-azcore/v0.21.0 (go1.16.7; Windows_NT)
X-Ms-Date:
- Sat, 11 Sep 2021 08:43:59 GMT
- Mon, 07 Feb 2022 06:13:51 GMT
X-Ms-Version:
- "2019-12-12"
url: https://azureblobstoragecanada.blob.core.windows.net/?comp=properties&restype=service
Expand All @@ -95,11 +95,11 @@ interactions:
Content-Length:
- "0"
Date:
- Sat, 11 Sep 2021 08:43:58 GMT
- Mon, 07 Feb 2022 06:13:50 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
X-Ms-Request-Id:
- ea510193-701e-002b-44e9-a64219000000
- 8d7f9d58-b01e-004f-7ae9-1bfe2c000000
X-Ms-Version:
- "2019-12-12"
status: 202 Accepted
Expand All @@ -114,9 +114,9 @@ interactions:
Authorization:
- sanitized
User-Agent:
- azsdk-go-azblob/v0.1.0 azsdk-go-azcore/v0.19.0 (go1.16.7; Windows_NT)
- azsdk-go-azblob/v0.3.0 azsdk-go-azcore/v0.21.0 (go1.16.7; Windows_NT)
X-Ms-Date:
- Sat, 11 Sep 2021 08:44:30 GMT
- Mon, 07 Feb 2022 06:14:21 GMT
X-Ms-Version:
- "2019-12-12"
url: https://azureblobstoragecanada.blob.core.windows.net/?comp=properties&restype=service
Expand All @@ -127,11 +127,11 @@ interactions:
Content-Type:
- application/xml
Date:
- Sat, 11 Sep 2021 08:44:29 GMT
- Mon, 07 Feb 2022 06:14:21 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
X-Ms-Request-Id:
- ea5143f1-701e-002b-5de9-a64219000000
- 8d7fef43-b01e-004f-5be9-1bfe2c000000
X-Ms-Version:
- "2019-12-12"
status: 200 OK
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,28 +14,28 @@ interactions:
Content-Type:
- application/xml
User-Agent:
- azsdk-go-azblob/v0.1.0 azsdk-go-azcore/v0.19.0 (go1.16.7; Windows_NT)
- azsdk-go-azblob/v0.3.0 azsdk-go-azcore/v0.21.0 (go1.16.7; Windows_NT)
X-Ms-Date:
- Sat, 11 Sep 2021 08:44:30 GMT
- Mon, 07 Feb 2022 06:14:22 GMT
X-Ms-Version:
- "2019-12-12"
url: https://azureblobstoragecanada.blob.core.windows.net/?comp=properties&restype=service
method: PUT
response:
body: "\uFEFF\x3C\x3F\x78\x6D\x6C\x20\x76\x65\x72\x73\x69\x6F\x6E\x3D\"\x31\x2E\x30\"\x20\x65\x6E\x63\x6F\x64\x69\x6E\x67\x3D\"\x75\x74\x66\x2D\x38\"\x3F\x3E\x3C\x45\x72\x72\x6F\x72\x3E\x3C\x43\x6F\x64\x65\x3E\x49\x6E\x76\x61\x6C\x69\x64\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74\x3C\x2F\x43\x6F\x64\x65\x3E\x3C\x4D\x65\x73\x73\x61\x67\x65\x3E\x58\x4D\x4C\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x69\x73\x20\x6E\x6F\x74\x20\x73\x79\x6E\x74\x61\x63\x74\x69\x63\x61\x6C\x6C\x79\x20\x76\x61\x6C\x69\x64\x2E\n\x52\x65\x71\x75\x65\x73\x74\x49\x64\x3A\x65\x61\x35\x31\x34\x35\x36\x30\x2D\x37\x30\x31\x65\x2D\x30\x30\x32\x62\x2D\x32\x35\x65\x39\x2D\x61\x36\x34\x32\x31\x39\x30\x30\x30\x30\x30\x30\n\x54\x69\x6D\x65\x3A\x32\x30\x32\x31\x2D\x30\x39\x2D\x31\x31\x54\x30\x38\x3A\x34\x34\x3A\x33\x30\x2E\x33\x33\x30\x37\x33\x37\x37\x5A\x3C\x2F\x4D\x65\x73\x73\x61\x67\x65\x3E\x3C\x4C\x69\x6E\x65\x4E\x75\x6D\x62\x65\x72\x3E\x31\x3C\x2F\x4C\x69\x6E\x65\x4E\x75\x6D\x62\x65\x72\x3E\x3C\x4C\x69\x6E\x65\x50\x6F\x73\x69\x74\x69\x6F\x6E\x3E\x37\x35\x3C\x2F\x4C\x69\x6E\x65\x50\x6F\x73\x69\x74\x69\x6F\x6E\x3E\x3C\x52\x65\x61\x73\x6F\x6E\x3E\x45\x6C\x65\x6D\x65\x6E\x74\x20\x69\x73\x20\x6D\x69\x73\x73\x69\x6E\x67\x3A\x20\x44\x61\x79\x73\x2E\x3C\x2F\x52\x65\x61\x73\x6F\x6E\x3E\x3C\x2F\x45\x72\x72\x6F\x72\x3E"
body: "\uFEFF\x3C\x3F\x78\x6D\x6C\x20\x76\x65\x72\x73\x69\x6F\x6E\x3D\"\x31\x2E\x30\"\x20\x65\x6E\x63\x6F\x64\x69\x6E\x67\x3D\"\x75\x74\x66\x2D\x38\"\x3F\x3E\x3C\x45\x72\x72\x6F\x72\x3E\x3C\x43\x6F\x64\x65\x3E\x49\x6E\x76\x61\x6C\x69\x64\x58\x6D\x6C\x44\x6F\x63\x75\x6D\x65\x6E\x74\x3C\x2F\x43\x6F\x64\x65\x3E\x3C\x4D\x65\x73\x73\x61\x67\x65\x3E\x58\x4D\x4C\x20\x73\x70\x65\x63\x69\x66\x69\x65\x64\x20\x69\x73\x20\x6E\x6F\x74\x20\x73\x79\x6E\x74\x61\x63\x74\x69\x63\x61\x6C\x6C\x79\x20\x76\x61\x6C\x69\x64\x2E\n\x52\x65\x71\x75\x65\x73\x74\x49\x64\x3A\x38\x64\x37\x66\x65\x66\x65\x39\x2D\x62\x30\x31\x65\x2D\x30\x30\x34\x66\x2D\x37\x30\x65\x39\x2D\x31\x62\x66\x65\x32\x63\x30\x30\x30\x30\x30\x30\n\x54\x69\x6D\x65\x3A\x32\x30\x32\x32\x2D\x30\x32\x2D\x30\x37\x54\x30\x36\x3A\x31\x34\x3A\x32\x31\x2E\x39\x31\x34\x33\x32\x39\x34\x5A\x3C\x2F\x4D\x65\x73\x73\x61\x67\x65\x3E\x3C\x4C\x69\x6E\x65\x4E\x75\x6D\x62\x65\x72\x3E\x31\x3C\x2F\x4C\x69\x6E\x65\x4E\x75\x6D\x62\x65\x72\x3E\x3C\x4C\x69\x6E\x65\x50\x6F\x73\x69\x74\x69\x6F\x6E\x3E\x37\x35\x3C\x2F\x4C\x69\x6E\x65\x50\x6F\x73\x69\x74\x69\x6F\x6E\x3E\x3C\x52\x65\x61\x73\x6F\x6E\x3E\x45\x6C\x65\x6D\x65\x6E\x74\x20\x69\x73\x20\x6D\x69\x73\x73\x69\x6E\x67\x3A\x20\x44\x61\x79\x73\x2E\x3C\x2F\x52\x65\x61\x73\x6F\x6E\x3E\x3C\x2F\x45\x72\x72\x6F\x72\x3E"
headers:
Content-Length:
- "327"
Content-Type:
- application/xml
Date:
- Sat, 11 Sep 2021 08:44:29 GMT
- Mon, 07 Feb 2022 06:14:21 GMT
Server:
- Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
X-Ms-Error-Code:
- InvalidXmlDocument
X-Ms-Request-Id:
- ea514560-701e-002b-25e9-a64219000000
- 8d7fefe9-b01e-004f-70e9-1bfe2c000000
X-Ms-Version:
- "2019-12-12"
status: 400 XML specified is not syntactically valid.
Expand Down
Loading