Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GetPropertiesAsync fails in Firefox with TypeError: e.body is null #111992

Open
1 task done
hectorm-bmg opened this issue Jan 29, 2025 · 3 comments
Open
1 task done

GetPropertiesAsync fails in Firefox with TypeError: e.body is null #111992

hectorm-bmg opened this issue Jan 29, 2025 · 3 comments
Assignees
Labels
arch-wasm WebAssembly architecture area-VM-meta-mono needs-author-action An issue or pull request that requires more info or actions from the author. os-browser Browser variant of arch-wasm
Milestone

Comments

@hectorm-bmg
Copy link

hectorm-bmg commented Jan 29, 2025

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

Describe the bug
From a Blazor Client side project, when I call the following:

var props = await blobClient.GetPropertiesAsync();

Firefox fails with the following error:
TypeError: e.body is null

Other browsers work as expected and I can see the properties for my blob.

Expected Behavior

The properties for the blob are returned to be use as needed.

Steps To Reproduce

Environment
Blazor App running in an Azure App Service using .net 8.0
Version 8.0.405

Visual Studio 2022 17.12.3

Create a SAS write uri for a new blob
Get a SAS url for the blob
Use the following method to upload the new blob from a blazor client side app running in Firefox. You'll notice that the call to GetPropertiesAsync will fail as described above.

public async Task UploadStream(string blobName, Stream stream, Uri sasTokenUri, long totalSize)
{
var containerClient = new BlobContainerClient(sasTokenUri);
var blobClient = containerClient.GetBlockBlobClient(blobName);

var blockIds = new List<string>();

var buffer = new byte[MaxChunkSize];
int bytesRead;
int blockNumber = 0;

var totalChunks = (totalSize / MaxChunkSize) + 1;

while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
    Logger.LogInformation($"Uploading block {blockNumber}/{totalChunks} for {blobName}.");

    string blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{blockNumber:D6}"));
    blockIds.Add(blockId);

    // Upload the block
    using var chunkStream = new MemoryStream(buffer, 0, bytesRead);
    await blobClient.StageBlockAsync(blockId, chunkStream);

    blockNumber++;
}

// Commit the blocks
await blobClient.CommitBlockListAsync(blockIds);

var props = await blobClient.GetPropertiesAsync();

while (props != null && props.Value.ContentLength < totalSize)
{
    // Check that the file has finished uploading.
    await Task.Delay(5000);
    Console.WriteLine($"Waiting for blob {blobName} to finish uploading.");
    props = await blobClient.GetPropertiesAsync();
}
}

Exceptions (if any)

Here's the exception I'm getting when executing GetPropertiesAsync:

fail: MyClient.Components.ProcessManager[0] Failed to Upload File: MyFile.txt System.Net.Http.HttpRequestException: TypeError: e.body is null ---> TypeError: e.body is null --- End of inner exception stack trace --- at System.Net.Http.BrowserHttpInterop.<CancelationHelper>d__131[[System.Int32, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
at System.Net.Http.WasmHttpReadStream.g__Impl|2_0(WasmHttpReadStream self, Memory1 buffer, CancellationToken cancellationToken) at System.Net.Http.WasmHttpReadStream.ReadAsync(Memory1 buffer, CancellationToken cancellationToken)
at Azure.Core.Pipeline.ResponseBodyPolicy.CopyToAsync(Stream source, Stream destination, CancellationTokenSource cancellationTokenSource)
at Azure.Core.Pipeline.ResponseBodyPolicy.ProcessAsync(HttpMessage message, ReadOnlyMemory1 pipeline, Boolean async) at Azure.Core.Pipeline.HttpPipelineSynchronousPolicy.InnerProcessAsync(HttpMessage message, ReadOnlyMemory1 pipeline)
at Azure.Core.Pipeline.RedirectPolicy.ProcessAsync(HttpMessage message, ReadOnlyMemory1 pipeline, Boolean async) at Azure.Core.Pipeline.RetryPolicy.ProcessAsync(HttpMessage message, ReadOnlyMemory1 pipeline, Boolean async)
at Azure.Core.Pipeline.RetryPolicy.ProcessAsync(HttpMessage message, ReadOnlyMemory1 pipeline, Boolean async) at Azure.Core.Pipeline.HttpPipelineSynchronousPolicy.InnerProcessAsync(HttpMessage message, ReadOnlyMemory1 pipeline)
at Azure.Core.HttpPipelineExtensions.ProcessMessageAsync(HttpPipeline pipeline, HttpMessage message, RequestContext requestContext, CancellationToken cancellationToken)
at Azure.Storage.Blobs.BlobRestClient.GetPropertiesAsync(String snapshot, String versionId, Nullable1 timeout, String leaseId, String encryptionKey, String encryptionKeySha256, String encryptionAlgorithm, String ifTags, RequestConditions requestConditions, RequestContext context) at Azure.Storage.Blobs.Specialized.BlobBaseClient.GetPropertiesInternal(BlobRequestConditions conditions, Boolean async, RequestContext context, String operationName) at Azure.Storage.Blobs.Specialized.BlobBaseClient.GetPropertiesAsync(BlobRequestConditions conditions, CancellationToken cancellationToken) ...  

.NET Version

8.0.405

Anything else?

dotnet --info
.NET SDK:
Version: 9.0.101
Commit: eedb237549
Workload version: 9.0.100-manifests.1e472b70
MSBuild version: 17.12.12+1cce77968

Runtime Environment:
OS Name: Windows
OS Version: 10.0.26100
OS Platform: Windows
RID: win-x64
Base Path: C:\Program Files\dotnet\sdk\9.0.101\

.NET workloads installed:
[android]
Installation Source: SDK 9.0.100, VS 17.12.35527.113, VS 17.8.34212.112
Manifest Version: 35.0.24/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.android\35.0.24\WorkloadManifest.json
Install Type: Msi

[aspire]
Installation Source: SDK 9.0.100, VS 17.12.35527.113
Manifest Version: 8.2.2/8.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.aspire\8.2.2\WorkloadManifest.json
Install Type: Msi

[ios]
Installation Source: SDK 9.0.100, VS 17.12.35527.113, VS 17.8.34212.112
Manifest Version: 18.2.9170/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.ios\18.2.9170\WorkloadManifest.json
Install Type: Msi

[maccatalyst]
Installation Source: SDK 9.0.100, VS 17.12.35527.113, VS 17.8.34212.112
Manifest Version: 18.2.9170/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.maccatalyst\18.2.9170\WorkloadManifest.json
Install Type: Msi

[maui-windows]
Installation Source: SDK 9.0.100, VS 17.12.35527.113, VS 17.8.34212.112
Manifest Version: 9.0.0/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.sdk.maui\9.0.0\WorkloadManifest.json
Install Type: Msi

[wasm-tools]
Installation Source: SDK 9.0.100, VS 17.12.35527.113, VS 17.8.34212.112
Manifest Version: 9.0.0/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.workload.mono.toolchain.current\9.0.0\WorkloadManifest.json
Install Type: Msi

[wasm-tools-net7]
Installation Source: SDK 9.0.100, VS 17.12.35527.113
Manifest Version: 9.0.0/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.workload.mono.toolchain.net7\9.0.0\WorkloadManifest.json
Install Type: Msi

[wasm-tools-net8]
Installation Source: SDK 9.0.100, VS 17.12.35527.113
Manifest Version: 9.0.0/9.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\9.0.100\microsoft.net.workload.mono.toolchain.net8\9.0.0\WorkloadManifest.json
Install Type: Msi

Configured to use loose manifests when installing new manifests.

Host:
Version: 9.0.0
Architecture: x64
Commit: 9d5a6a9

.NET SDKs installed:
3.1.426 [C:\Program Files\dotnet\sdk]
8.0.100-rc.2.23502.2 [C:\Program Files\dotnet\sdk]
8.0.405 [C:\Program Files\dotnet\sdk]
9.0.101 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
Microsoft.AspNetCore.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.20 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 8.0.0-rc.2.23480.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 8.0.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 8.0.12 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 9.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.20 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 8.0.0-rc.2.23479.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 8.0.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 8.0.12 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 9.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 6.0.36 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 7.0.20 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 8.0.0-rc.2.23479.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 8.0.11 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 8.0.12 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 9.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
x86 [C:\Program Files (x86)\dotnet]
registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

Environment variables:
Not set

global.json file:
Not found

Learn more:
https://aka.ms/dotnet/info

Download .NET:
https://aka.ms/dotnet/download

@dotnet-issue-labeler dotnet-issue-labeler bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Jan 29, 2025
@martincostello martincostello removed the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Jan 30, 2025
@javiercn javiercn transferred this issue from dotnet/aspnetcore Jan 30, 2025
@dotnet-issue-labeler dotnet-issue-labeler bot added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Jan 30, 2025
@dotnet-policy-service dotnet-policy-service bot added the untriaged New issue has not been triaged by the area owner label Jan 30, 2025
@jkotas jkotas added arch-wasm WebAssembly architecture os-browser Browser variant of arch-wasm labels Jan 30, 2025
Copy link
Contributor

Tagging subscribers to 'arch-wasm': @lewing
See info in area-owners.md if you want to be subscribed.

@jkotas jkotas added area-VM-threading-mono and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Jan 30, 2025
@lewing
Copy link
Member

lewing commented Jan 30, 2025

Can you reproduce the problem using .NET 9 or later, there have been substantial changes to the this part of the code since NET 8.

@lewing lewing added this to the 8.0.x milestone Jan 30, 2025
@lewing lewing added needs-author-action An issue or pull request that requires more info or actions from the author. and removed untriaged New issue has not been triaged by the area owner labels Jan 30, 2025
Copy link
Contributor

This issue has been marked needs-author-action and may be missing some important information.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
arch-wasm WebAssembly architecture area-VM-meta-mono needs-author-action An issue or pull request that requires more info or actions from the author. os-browser Browser variant of arch-wasm
Projects
None yet
Development

No branches or pull requests

5 participants