【发布时间】: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