我想从
web api
获取一些数据,我写了这段代码:
var response = await Client.GetAsync("https://SomeURL/Action");
当我在按钮中运行此代码时,单击我收到此错误:
从源“http://OtherURL”获取“https://SomeURL/Action”的访问已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。
所以为了解决这个问题,我试图在
program.cs
应用程序中的Blazor
中添加此代码:
builder.Services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder => builder.WithOrigins("https://SomeURL/")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((host) => true));
});
但是
Services
不包含 AddCors
的定义。我该如何解决这个问题?谢谢
编辑1)
我创建了非常简单的内置 Web api:
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
我得到了结果:
当我想连接到此 Web api 时,出现
CORS
错误。我在 Web API项目中更改了
program.cs
:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddCors(options =>
{
options.AddPolicy("CorsPolicy", builder =>
builder.WithOrigins("http://localhost:5179")
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((host) => true));
});
var app = builder.Build();
app.UseCors();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
在
Blazor
项目中我有这个:
@page "/counter"
@inject HttpClient Client
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private async Task IncrementCount()
{
currentCount++;
var response = await Client.GetAsync("https://localhost:7229/weatherforecast");
}
}
请帮我解决问题。
我认为 CORS 是一项服务器功能,而 Blazor WASM 是一个客户端,我不知道如何在应用程序中添加 CORS 策略。
这对我有用:
通过策略名称添加
app.UseCors();
:
app.UseHttpsRedirection();
app.UseCors("CorsPolicy");
app.UseAuthorization();