我目前正在学习一个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个例子。
但经过几个小时的不同尝试,我仍然运气不好,我不知道我错过了什么。
我怀疑有什么很明显的问题,但我想不出来。希望这里有人能给我指出正确的方向
3条答案
按热度按时间jhiyze9q1#
尝试添加命名的cors策略:
并利用它
anauzrmj2#
对我有效的方法是在
Program.cs
中重新排列一些数据,就像下面的答案一样。v1l68za43#
在阅读了这个小旁注https://stackoverflow.com/a/59042810/2311139之后
我测试了https重定向的注解,发现我的请求正在工作。现在我意识到可能应该尝试通过https运行请求来启动,而不是将该设置留到以后。