【问题标题】:Pass Base Address with Blazor WASM使用 Blazor WASM 传递基地址
【发布时间】:2022-01-27 11:04:02
【问题描述】:

我正在开发一个带有后端 API 的 Blazor WASM 应用程序。这是在 .Net6 中完成的

我的问题是我希望能够在一个位置设置我的基地址 - 但我所拥有的似乎不起作用。我已经验证,如果我输入完整的 URI,我可以与 API 对话。

我的客户程序.CS 文件:

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");

builder.Services.AddScoped<OrgHealthAuthorizationMessageHandler>();
builder.Services.AddHttpClient("OrgHealth.ServerAPI", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
   .AddHttpMessageHandler<OrgHealthAuthorizationMessageHandler>();
builder.Services.AddTransient(sp => sp.GetRequiredService<IHttpClientFactory>().CreateClient("OrgHealth.ServerAPI"));


builder.Services.AddMsalAuthentication(options =>
{
    builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication);
    options.ProviderOptions.DefaultAccessTokenScopes.Add("https://authorghealth.onmicrosoft.com/22222222-2222-22222-22222-222222222222/API.Access.All");
});

await builder.Build().RunAsync();

我的 OrgHealthAuthorizationMessageHandler.cs

public class OrgHealthAuthorizationMessageHandler : AuthorizationMessageHandler
{
    public OrgHealthAuthorizationMessageHandler(IAccessTokenProvider AProvider, NavigationManager ANavigation) : base(AProvider, ANavigation)
    {
        ConfigureHandler(authorizedUrls: new[] {  "https://localhost:7061/" });
    }
}

这就是我要打的电话:

var test = await Http.GetStringAsync("AzureStorage/GetTestData");

当我运行它时它不起作用并给我一个错误,表明它访问了不正确的地址 - 我已经验证它将错误的本地主机信息作为 URI 的一部分。我的理解是应该使用来自 OrgHealthAuthorizationMessageHandler 的信息。但事实并非如此。

如果我这样做;

var test = await Http.GetStringAsync("https://localhost:7061/AzureStorage/GetTestData");

它工作得很好。我在这个配置中缺少什么?

【问题讨论】:

  • 您已经在 IHttpClientFactory 中存储了一个 http 客户端,并为基地址配置了密钥“OrgHealth.ServerAPI”。在您的第 5 行代码中。

标签: c# api blazor blazor-webassembly


【解决方案1】:

你可以像这样分配基址

var baseAddress = "https://localhost:7061";
var api = "/AzureStorage/GetTestData";

Http.BaseAddress = new Uri(baseAddress);

.... other int http client code

var test = await Http.GetStringAsync(api);

【讨论】:

    【解决方案2】:

    我的理解是信息来自 应该使用 OrgHealthAuthorizationMessageHandler。但事实并非如此。

    你的理解不正确。当您使用相对 uris 时,会附加 BaseAddress。所以需要设置为https://localhost:7061/

    【讨论】:

      猜你喜欢
      • 2021-06-08
      • 2021-01-02
      • 1970-01-01
      • 2022-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多