.Net Core API模板CORS问题来自axios

nkcskrwz  于 2023-01-17  发布在  iOS
关注(0)|答案(3)|浏览(123)

我目前正在学习一个React教程,其中使用axios从一个虚假的Web服务获取数据。我决定使用来自Visual Studio Community 2019的www.example.com核心应用程序A {I模板制作一个基本的Web服务器,添加一个新的控制器来返回一些硬编码数据。ASP.net Core application A{I template from visual studio comunity 2019, add a new controller to return some hardcoded data.
服务器一切正常,当我使用postman点击get方法时,我可以从带有序列化json对象的get方法中检索字符串。
然后,我尝试让axios运行相同的get请求,并且我一直得到
CORS策略已阻止从源"http://localhost:3000"访问位于"http://localhost:52340/tools"的XMLHttpRequest:请求的资源上不存在"Access-Control-Allow-Origin"标头。
在chrome中,在firefox中也有类似错误。
在快速搜索了一下之后,我开始使用"Microsoft. AspNetCore. Cors 2. 2. 0"包以声称可以工作的多种格式添加Cors。但我的React应用程序在尝试获取数据时继续在控制台中返回相同的错误。
我已经尝试在行动的基础上设置CORS,具体的政策名称,控制器范围和目前在我的startup.cs代码如下。

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCors(options=>
        {
            options.AddDefaultPolicy(builder =>
            {
                builder
                .SetIsOriginAllowed((host) => true)
                .AllowAnyMethod()
                .AllowCredentials()
                .AllowAnyHeader()
                ;
            });
        });
        services.AddControllers().SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Latest);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseHttpsRedirection();

        app.UseRouting();
        //app.UseCors(options => options.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
        app.UseCors();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

我看到了很多关于这个主题的博客文章和堆栈溢出问题,这些只是2个例子。
但经过几个小时的不同尝试,我仍然运气不好,我不知道我错过了什么。
我怀疑有什么很明显的问题,但我想不出来。希望这里有人能给我指出正确的方向

jhiyze9q

jhiyze9q1#

尝试添加命名的cors策略:

services.AddCors(o => o.AddPolicy("LowCorsPolicy", builder =>
            {
                builder.AllowAnyOrigin()
                       .AllowAnyMethod()
                       .AllowAnyHeader();
            }));

并利用它

app.UseCors("LowCorsPolicy");

app.UseHttpsRedirection();
app.UseRouting();
anauzrmj

anauzrmj2#

对我有效的方法是在Program.cs中重新排列一些数据,就像下面的答案一样。

https://stackoverflow.com/a/75138024/8195076
v1l68za4

v1l68za43#

在阅读了这个小旁注https://stackoverflow.com/a/59042810/2311139之后
我测试了https重定向的注解,发现我的请求正在工作。现在我意识到可能应该尝试通过https运行请求来启动,而不是将该设置留到以后。

相关问题