问题描述
我有一个Blazor服务器应用程序,我想要添加一个Web API控制器,可以从Postman访问,最终也可以从其他应用程序访问。Blazor应用程序需要身份验证,但不需要Web API。我尝试添加AllowAnonymous
,但收到从邮递员调用它的身份验证错误:
我怀疑我们的安全代理正在添加标头:
是否可以在经过身份验证的Blazor服务器应用程序中托管不安全的(AllowAnonymous)Web API?
也许我只需要以某种方式定制我的API调用?
控制器:
[Route("api/[controller]")]
[ApiController]
[AllowAnonymous]
public class ProfileController : ControllerBase
{
[HttpGet("{year}", Name = "GetProfileResults")]
public async Task<IActionResult> GetProfileResults(int year)
{
var profileResults = repo.GetResults(year);
return Ok(profileResults);
}
}
推荐答案
您必须添加另一个未附加令牌的HTTP客户端。
Program.cs
builder.Services.AddHttpClient(
name: "Anon.ServerAPI",
client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress));
RazorPage.razor.cs
[Inject]
public IHttpClientFactory HttpClientFactory { get; set; }
protected override async Task OnInitializedAsync()
{
http = HttpClientFactory.CreateClient("Anon.ServerAPI");
videos = await http.GetFromJsonAsync<VideoDto[]>("api/YoutubeVideos");
}