我正在尝试使用Cors在Angular和.net API之间建立连接。我不断收到此错误:
localhost/:1 Access to XMLHttpRequest at 'https://localhost:44378/api/OffRec' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
为了解决此错误。我在自己的ConfigureServices中添加了addCors,在Configure中添加了userCors,如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder =>
{
builder.WithOrigins(new string[] { "http://localhost:4200" , "https://localhost:44378/api/offrec" }).AllowAnyMethod().WithHeaders("Access-Control-Allow-Origin");
});
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
services.AddControllers();
services.AddDbContext<db_recloadContext>();
}
我的Configure方法仅使用cors:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseRouting();
app.UseCors("CorsPolicy");
app.UseHttpsRedirection();
// app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
我的api有一个非常简单的代码,该代码返回一个字符串,当我运行我的api时,它可以正常工作。
过去2天,我一直在努力解决此错误。任何提示或帮助将不胜感激。
这是我根据以下答案尝试的操作仍然出现相同的错误:
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder =>
{
builder.WithOrigins(new string[] { "http://localhost:4200" , "https://localhost:44378/api/offrec" }).AllowAnyMethod().WithHeaders("Access-Control-Allow-Origin:*");
});
});
下面是错误的图片:
以下是我的api:
namespace RecLoad.Controllers
{
[Route("api/[controller]")]
[EnableCors("AllowAnyCorsPolicy")]
[HttpGet]
public ActionResult<string> Get()
{
return "This is a test";
}
答案 0 :(得分:0)
CORS是一种工具,可让某些服务的所有者限制可以从何处访问该服务。您有一个位于localhost:4200的网站,并且它正在与localhost:44378的Web服务联系以请求一些数据。我知道它们都是本地主机,但是它们是不同的东西。它们也可能是http://mysite.example上的脚本,试图从http://remoteservice.example获取数据。
因此,您的浏览器在4200网站上的页面上运行脚本,知道,该服务器正在与一台与其下载脚本的服务器不同的服务器联系,因此该服务器对另一台服务器说服务器“嘿,告诉我您将接受来自/ api / offRec上的资源的请求的服务器是什么”,服务器(在44378处)响应诸如“我将只允许从我那里下载的脚本”这样的响应。>
此时,您的浏览器暂停了该请求; “外部”服务器并未表示愿意将该资源提供给您的脚本
作为44378服务器的管理员,您需要做的是在其配置中添加一些CORS标头,说“ Access-Control-Allow-Origin:*”或“ Access-Control-Allow-Origin:{ {3}}”等,这样,当在站点4200上的站点上运行脚本的浏览器从44378资源中请求信息时,它得到的响应还包含一个允许访问的标头
请重申一下,以防万一我不清楚:运行44378站点的服务器必须添加标头,而不是4200站点
使用网络浏览器向44378网站发出请求,并在开发工具检查器中查看标题。如果没有看到Access-Control-Allow-Origin标头,请重新配置它,直到您这样做