Blazor WebAssembly .Net 8 WebAPI CORS 问题

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

我有默认的 Blazor APP,并且我修改了主页以调用 API。当 API 最初运行时,API 工作正常,但是一两秒后应用程序刷新,我看到“TypeError:无法获取”。当我查看控制台时,我看到以下内容

从源“https://localhost:7280”获取“https://example.com”的访问已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:无“Access-Control-”请求的资源上存在“Allow-Origin”标头。如果不透明响应满足您的需求,请将请求模式设置为“no-cors”以在禁用 CORS 的情况下获取资源。

因此,它似乎在应用程序预渲染时可以工作,但在完全加载后就无法工作。

这是我的代码

BlazorApp1\program.cs

builder.Services.AddHttpClient();
builder.Services.AddCors(options =>
{
    options.AddDefaultPolicy(
        policy =>
        {
            policy.WithOrigins("https://example.com");
        });
});

.
.

app.UseCors();

BlazorApp1.Client\program.cs

builder.Services.AddScoped(sp => new HttpClient());

BlazorApp1.Client\Pages\Home.Razor

@page "/"
@inject HttpClient Http

response: @resptext

@code {
    public string resptext { get; set; } = "";

    protected override async Task OnInitializedAsync() {

            var request = new HttpRequestMessage(HttpMethod.Get, "https://example.com");
            request.Headers.Add("oid", "00000000-0000-0000-0000-000000000000");

            try
            {
                var response = await Http.SendAsync(request);

                resptext = await response.Content.ReadAsStringAsync();
            }
            catch (Exception ex)
            {
                resptext = ex.Message;
            }
    }
}

当应用程序运行时,如果我运行 Chrome 并禁用 CORS,它可以正常工作

"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:\temp\chrome"

我认为问题是我需要将 CORS 策略添加到 BlazorApp1.Client 项目,但我不确定如何执行此操作?

cors blazor asp.net-core-webapi blazor-webassembly .net-8.0
1个回答
0
投票

我已经成功解决了这个问题,事实上它最初一直有效,直到预渲染表明这是 Blazor 问题之后。事实上,问题出在我调用的 API 中的 CORS 上。我将其添加到 API 解决方案中

API/程序.cs

builder.Services.AddCors(options =>
    {
        options.AddDefaultPolicy(builder =>
        {
            builder.AllowAnyOrigin()
                   .AllowAnyMethod()
                   .AllowAnyHeader();
        });
    });

.
.

app.UseCors();

我已从 Blazor 应用程序中删除了 CORS,一切正常!

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.