Asp.net core 在ASP.NET Core托管的Blazor应用程序中匿名调用服务器

Asp.net core 在ASP.NET Core托管的Blazor应用程序中匿名调用服务器,asp.net-core,asp.net-core-webapi,blazor,blazor-client-side,blazor-webassembly,Asp.net Core,Asp.net Core Webapi,Blazor,Blazor Client Side,Blazor Webassembly,我使用VS中包含的模板创建了Blazor Webassembly应用程序,具有授权和ASP.NET核心托管选项,如下所示: 我希望能够在不经过身份验证的情况下向服务器发出http请求。我通过注释掉[Authorize]属性更改了WeatherForecastController中的代码(甚至添加了[AllowAnonymous]属性): 我得到的例外是上面的代码。我怀疑问题出在App.razor的页面上,但无法解决 有什么帮助吗?有人在这里发布了一个答案,上面说问题出在客户项目的Program

我使用VS中包含的模板创建了Blazor Webassembly应用程序,具有授权和ASP.NET核心托管选项,如下所示:

我希望能够在不经过身份验证的情况下向服务器发出http请求。我通过注释掉
[Authorize]
属性更改了
WeatherForecastController
中的代码(甚至添加了
[AllowAnonymous]
属性):

我得到的例外是上面的代码。我怀疑问题出在App.razor的
页面上,但无法解决


有什么帮助吗?

有人在这里发布了一个答案,上面说问题出在客户项目的
Program.cs
文件的下面一行:

builder.Services.AddHttpClient("RclConsumer.ServerAPI", client => client.BaseAddress = new 
   Uri(builder.HostEnvironment.BaseAddress))
   .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
我把它放在自己的类库中的理由是,我计划添加Razor类库,我希望在整个解决方案中使用
HttpClient
的单个实例,因为

@page "/fetchdata"
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using StackOverflowAuthProblem.Shared
@*@attribute [Authorize]*@ @*CHANGED*@
@inject HttpClient Http

@*CHANGED Html removed for brevity*@

<div>Exception message: @exceptionMessage</div>

@code {
    private WeatherForecast[] forecasts;

    string exceptionMessage; //CHANGED

    protected override async Task OnInitializedAsync()
    {
        try
        {
            forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("WeatherForecast");
        }
        catch (AccessTokenNotAvailableException exception)
        {
            exceptionMessage = exception.Message; //CHANGED returns an empty string

            exceptionMessage = exception.ToString(); //CHANGED returns
                //Microsoft.AspNetCore.Components.WebAssembly.Authentication.AccessTokenNotAvailableException: '' at
                //Microsoft.AspNetCore.Components.WebAssembly.Authentication.AuthorizationMessageHandler.SendAsync(HttpRequestMessage request,
                //CancellationToken cancellationToken) at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.SendAsync(
                //    HttpRequestMessage request, CancellationToken cancellationToken)
                //at System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage request,
                //HttpCompletionOption completionOption, Boolean async, Boolean emitTelemetryStartStop,
                //CancellationToken cancellationToken) 
                //at System.Net.Http.Json.HttpClientJsonExtensions.<GetFromJsonAsyncCore>d__9`1[[StackOverflowAuthProblem.Shared.WeatherForecast[],
                //StackOverflowAuthProblem.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
                //at StackOverflowAuthProblem.Client.Pages.FetchData.OnInitializedAsync()
                //in E:\StackOverflow\StackOverflowAuthProblem\StackOverflowAuthProblem\Client\Pages\FetchData.razor:line 53

            //exception.Redirect(); CHANGE
        }
    }
}
builder.Services.AddHttpClient("RclConsumer.ServerAPI", client => client.BaseAddress = new 
   Uri(builder.HostEnvironment.BaseAddress))
   .AddHttpMessageHandler<BaseAddressAuthorizationMessageHandler>();
public static class HttpClientService
{
    public static HttpClient AnonymousHttpClient { get; set; }

    static HttpClientService()
    {
        AnonymousHttpClient = new HttpClient();

#if DEBUG
        AnonymousHttpClient.BaseAddress = new Uri("https://localhost:44395/");
#else
        throw new Exception("Need the Base address here");
#endif

    }
}