如何从识别身份验证中排除剃刀页面和控制器?



我创建了一个具有标识(个人帐户)的blazor web组装项目,并且我通过复制fetchData创建了剃刀。剃刀到一个fetchPeople。Razor,我想允许匿名访问这个页面,这是我的源代码

@page "/fetchpeople"
@using Booking.Shared
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@inject HttpClient Http
@attribute [AllowAnonymous]
<PageTitle>People</PageTitle>
<h1>People</h1>
<p>This component demonstrates fetching data from the server.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Id</td>
<td>@forecast.FirstName</td>
<td>@forecast.LastName</td>
<td>@forecast.LastName</td>
</tr>
}
</tbody>
</table>
}
@code {
private PersonModel[]? forecasts;
protected override async Task OnInitializedAsync()
{
forecasts = await Http.GetFromJsonAsync<PersonModel[]>("People");
}
}

控制器:

using Booking.Shared;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System.Xml.Linq;
using System.Collections.Generic;
using Booking.Server.Data;
using Microsoft.AspNetCore.Authorization;
namespace a1.Server.Controllers
{
[AllowAnonymous]
[ApiController]
[Route("[controller]")]
public class PeopleController : ControllerBase
{

private readonly ILogger<PeopleController> _logger;
private readonly IDataAccess data;

public PeopleController(ILogger<PeopleController> logger, IDataAccess data)
{
_logger = logger;
this.data = data;
}
[HttpGet]
public IEnumerable<PersonModel> Get()
{
return data.testSql().Result.ToArray();
}
}
}

访问页面时,控制台

出现错误
crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
Unhandled exception rendering component: ''
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.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at System.Net.Http.Json.HttpClientJsonExtensions.<GetFromJsonAsyncCore>d__13`1[[Booking.Shared.PersonModel[], Booking.Shared, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
at Booking.Client.Pages.FetchPeople.OnInitializedAsync() in E:2022_hoplun_dotnetlogin1BookingBookingClientPagesFetchPeople.razor:line 49
at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()
at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)
window.Module.s.printErr @ blazor.webassembly.js:1
Fe._internal.dotNetCriticalError @ blazor.webassembly.js:1
St @ blazor.webassembly.js:1
_mono_wasm_invoke_js_blazor @ dotnet.6.0.11.yp634snq4a.js:1
$func219 @ 00971d3e:0x1a492
$func167 @ 00971d3e:0xce60
$func166 @ 00971d3e:0xbd73
$func2815 @ 00971d3e:0xabec4
$func1619 @ 00971d3e:0x6fc85
$func1623 @ 00971d3e:0x702f2
$mono_wasm_invoke_method @ 00971d3e:0x969f
Module._mono_wasm_invoke_method @ dotnet.6.0.11.yp634snq4a.js:1
managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS @ managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS:16
endInvokeJSFromDotNet @ blazor.webassembly.js:1
(anonymous) @ blazor.webassembly.js:1
Promise.then (async)
beginInvokeJSFromDotNet @ blazor.webassembly.js:1
St @ blazor.webassembly.js:1
_mono_wasm_invoke_js_blazor @ dotnet.6.0.11.yp634snq4a.js:1
$func219 @ 00971d3e:0x1a492
$func167 @ 00971d3e:0xce60
$func166 @ 00971d3e:0xbd73
$func2815 @ 00971d3e:0xabec4
$func1619 @ 00971d3e:0x6fc85
$func1623 @ 00971d3e:0x702f2
$mono_wasm_invoke_method @ 00971d3e:0x969f
Module._mono_wasm_invoke_method @ dotnet.6.0.11.yp634snq4a.js:1
managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS @ managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS:16
endInvokeJSFromDotNet @ blazor.webassembly.js:1
(anonymous) @ blazor.webassembly.js:1
Promise.then (async)
beginInvokeJSFromDotNet @ blazor.webassembly.js:1
St @ blazor.webassembly.js:1
_mono_wasm_invoke_js_blazor @ dotnet.6.0.11.yp634snq4a.js:1
$func219 @ 00971d3e:0x1a492
$func167 @ 00971d3e:0xce60
$func166 @ 00971d3e:0xbd73
$func2815 @ 00971d3e:0xabec4
$func1619 @ 00971d3e:0x6fc85
$func1623 @ 00971d3e:0x702f2
$mono_wasm_invoke_method @ 00971d3e:0x969f
Module._mono_wasm_invoke_method @ dotnet.6.0.11.yp634snq4a.js:1
managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS @ managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS:16
endInvokeJSFromDotNet @ blazor.webassembly.js:1
(anonymous) @ blazor.webassembly.js:1
Promise.then (async)
beginInvokeJSFromDotNet @ blazor.webassembly.js:1
St @ blazor.webassembly.js:1
_mono_wasm_invoke_js_blazor @ dotnet.6.0.11.yp634snq4a.js:1
$func219 @ 00971d3e:0x1a492
$func167 @ 00971d3e:0xce60
$func166 @ 00971d3e:0xbd73
$func2815 @ 00971d3e:0xabec4
$func1619 @ 00971d3e:0x6fc85
$func1623 @ 00971d3e:0x702f2
$mono_wasm_invoke_method @ 00971d3e:0x969f
Module._mono_wasm_invoke_method @ dotnet.6.0.11.yp634snq4a.js:1
managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS @ managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS:16
endInvokeJSFromDotNet @ blazor.webassembly.js:1
(anonymous) @ blazor.webassembly.js:1
Promise.then (async)
beginInvokeJSFromDotNet @ blazor.webassembly.js:1
St @ blazor.webassembly.js:1
_mono_wasm_invoke_js_blazor @ dotnet.6.0.11.yp634snq4a.js:1
$func219 @ 00971d3e:0x1a492
$func167 @ 00971d3e:0xce60
$func166 @ 00971d3e:0xbd73
$func2815 @ 00971d3e:0xabec4
$func1619 @ 00971d3e:0x6fc85
$func1623 @ 00971d3e:0x702f2
$mono_wasm_invoke_method @ 00971d3e:0x969f
Module._mono_wasm_invoke_method @ dotnet.6.0.11.yp634snq4a.js:1
managed_BINDINGS_SetTaskSourceResult @ managed_BINDINGS_SetTaskSourceResult:17
(anonymous) @ dotnet.6.0.11.yp634snq4a.js:1
Promise.then (async)
_wrap_js_thenable_as_task @ dotnet.6.0.11.yp634snq4a.js:1
_js_to_mono_obj @ dotnet.6.0.11.yp634snq4a.js:1
js_to_mono_obj @ dotnet.6.0.11.yp634snq4a.js:1
receiveHotReload @ blazor-hotreload.js:2
St @ blazor.webassembly.js:1
_mono_wasm_invoke_js_blazor @ dotnet.6.0.11.yp634snq4a.js:1
$func219 @ 00971d3e:0x1a492
$func167 @ 00971d3e:0xce60
$func166 @ 00971d3e:0xbd73
$func2815 @ 00971d3e:0xabec4
$func1619 @ 00971d3e:0x6fc85
$func1623 @ 00971d3e:0x702f2
$mono_wasm_invoke_method @ 00971d3e:0x969f
Module._mono_wasm_invoke_method @ dotnet.6.0.11.yp634snq4a.js:1
managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS @ managed__Microsoft_AspNetCore_Components_WebAssembly__Microsoft_AspNetCore_Components_WebAssembly_Services_DefaultWebAssemblyJSRuntime_EndInvokeJS:16
endInvokeJSFromDotNet @ blazor.webassembly.js:1
(anonymous) @ blazor.webassembly.js:1
Promise.then (async)
beginInvokeJSFromDotNet @ blazor.webassembly.js:1
St @ blazor.webassembly.js:1
_mono_wasm_invoke_js_blazor @ dotnet.6.0.11.yp634snq4a.js:1
$func219 @ 00971d3e:0x1a492
$func167 @ 00971d3e:0xce60
$func166 @ 00971d3e:0xbd73
$func2815 @ 00971d3e:0xabec4
$func1619 @ 00971d3e:0x6fc85
$func1623 @ 00971d3e:0x702f2
$mono_wasm_invoke_method @ 00971d3e:0x969f
Module._mono_wasm_invoke_method @ dotnet.6.0.11.yp634snq4a.js:1
managed_BINDINGS_SetTaskSourceResult @ managed_BINDINGS_SetTaskSourceResult:17
(anonymous) @ dotnet.6.0.11.yp634snq4a.js:1
Promise.then (async)
_wrap_js_thenable_as_task @ dotnet.6.0.11.yp634snq4a.js:1
_js_to_mono_obj @ dotnet.6.0.11.yp634snq4a.js:1
js_to_mono_obj @ dotnet.6.0.11.yp634snq4a.js:1
Fe._internal.getSatelliteAssemblies @ blazor.webassembly.js:1
St @ blazor.webassembly.js:1
_mono_wasm_invoke_js_blazor @ dotnet.6.0.11.yp634snq4a.js:1
$func219 @ 00971d3e:0x1a492
$func167 @ 00971d3e:0xce60
$func166 @ 00971d3e:0xbd73
$func2815 @ 00971d3e:0xabec4
$func1619 @ 00971d3e:0x6fc85
$func1623 @ 00971d3e:0x702f2
$mono_wasm_invoke_method @ 00971d3e:0x969f
Module._mono_wasm_invoke_method @ dotnet.6.0.11.yp634snq4a.js:1
_call_method_with_converted_args @ dotnet.6.0.11.yp634snq4a.js:1
call_method @ dotnet.6.0.11.yp634snq4a.js:1
(anonymous) @ dotnet.6.0.11.yp634snq4a.js:1
call_assembly_entry_point @ dotnet.6.0.11.yp634snq4a.js:1
callEntryPoint @ blazor.webassembly.js:1
At @ blazor.webassembly.js:1
await in At (async)
(anonymous) @ blazor.webassembly.js:1
(anonymous) @ blazor.webassembly.js:1

有人知道怎么修理它吗?

我已经在program.cs中添加了这些行

builder.Services.AddHttpClient("Booking.ServerAPI.Anonymous", client =>
{
client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress);
});

fetchPeople.razor

@page "/fetchpeople"
@using Booking.Shared
@inject IHttpClientFactory _factory
@inject HttpClient Http
<PageTitle>People</PageTitle>
<h1>People</h1>
<p>This component demonstrates fetching data from the server.</p>
@if (forecasts == null)
{
<p><em>Loading...</em></p>
}
else
{
<table class="table">
<thead>
<tr>
<th>Date</th>
<th>Temp. (C)</th>
<th>Temp. (F)</th>
<th>Summary</th>
</tr>
</thead>
<tbody>
@foreach (var forecast in forecasts)
{
<tr>
<td>@forecast.Id</td>
<td>@forecast.FirstName</td>
<td>@forecast.LastName</td>
<td>@forecast.LastName</td>
</tr>
}
</tbody>
</table>
}
@code {
private PersonModel[]? forecasts;
protected override async Task OnInitializedAsync()
{
var httpClient = _factory.CreateClient("Booking.ServerAPI.Anonymous");
forecasts = await httpClient.GetFromJsonAsync<PersonModel[]>("People");
}
}

最新更新