Services 不包含用于解决 WASM 中跨站点起源问题的 AddCors 的定义

问题描述 投票:0回答:2

我想从

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");
    }
}

请帮我解决问题。

c# cors blazor blazor-webassembly .net-6.0
2个回答
0
投票

我认为 CORS 是一项服务器功能,而 Blazor WASM 是一个客户端,我不知道如何在应用程序中添加 CORS 策略。


-1
投票

这对我有用:

通过策略名称添加

app.UseCors();

app.UseHttpsRedirection();

app.UseCors("CorsPolicy");

app.UseAuthorization();
© www.soinside.com 2019 - 2024. All rights reserved.