dotnet / aspire

An opinionated, cloud ready stack for building observable, production ready, distributed applications in .NET
https://learn.microsoft.com/dotnet/aspire
MIT License
3.38k stars 351 forks source link

Aspire doesn't replace http client Uri with actual address in blazor webassembly standalone app because it don't have appsettings.json #4785

Open Regestea opened 5 days ago

Regestea commented 5 days ago

Describe the bug

i referenced the blazor project to Aspire app host so this is my aspire app host code

using AnswerMe.Aspire.AppHost;

    var builder = DistributedApplication.CreateBuilder(args);

    var identityServerDb=builder.AddPostgres("identityserver", password: builder.CreateStablePassword("AnswerMeDB-password"))
        .WithDataVolume()
        .WithPgAdmin()
        .AddDatabase("IdentityServerDb");

    var identityServerApi = builder.AddProject<Projects.IdentityServer_Api>("identityserverapi")
        .WithReference(identityServerDb);

    var client = builder.AddProject<Projects.AnswerMe_Client>("answermeclient")
        .WithReference(identityServerApi);

    builder. Build().Run();

and this is my blazor code to add HTTP client

builder.Services.AddHttpClient(nameof(HttpClients.IdentityServer),
    client => { client.BaseAddress = new("http://identityserverapi"); });

so as you can see in the result it doesn't replace the http://identityserverapi with the actual address

file

and also i found the builder.Configuration.GetConnectionString("identityserverapi"); doesn't work because we don't have appsettings.json in blazor wasm so i think Aspire doesn't work fo the blazor wasm

yarseyah commented 4 days ago

Have you added builder.AddServiceDefaults() and app.MapDefaultEndpoints() to ensure the service discovery is included in your web application?

Service discovery doesn't work on the Wasm side, you need to look into Yarp on the web-server side of the Blazor solution and redirect to the API.

Regestea commented 3 days ago

@yarseyah I tried to add builder.AddServiceDefaults() in Wasm project program.cs file but it gave me a lot of error, and also we don't have app in Blazor Web assembly standalone so I can't use app.MapDefaultEndpoints()and also I take looked at builder.Configuration of my blazor project and it's almost empty

image
yarseyah commented 3 days ago

I'm not sure there are any Aspire components that make sense for the Blazor Wasm. You can add service discovery, etc., to the Blazor Server, but your client is entirely standalone—you want to send your API calls to the server and have the server, via Yarp, redirect your requests to the API.