从托管在被 CORS 策略阻止的 Asp.net 核心 Web 服务器中的 Angular 应用程序调用我的休息服务
Posted
技术标签:
【中文标题】从托管在被 CORS 策略阻止的 Asp.net 核心 Web 服务器中的 Angular 应用程序调用我的休息服务【英文标题】:Call to my rest service from Angular app hosted in Asp.net core web server blocked by CORS policy 【发布时间】:2020-09-11 20:07:41 【问题描述】:我有一个托管在 Asp.net 核心 Web 服务器中的 Angular 应用程序,虽然这个 Angular 应用程序我正在调用另一个 Rest api 服务来获取一些数据,但我对外部 Rest Service api 的调用被 CORS 策略阻止。
我在浏览器中遇到的错误是 -
和我的 Asp.net 服务器应用程序 Startup.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace WebclientServer
public class Startup
// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit
https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
services.AddCors(options =>
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
);
services.AddMvc();
// 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.UseRouting();
//app.UseEndpoints(endpoints =>
//
// endpoints.MapGet("/", async context =>
//
// await context.Response.WriteAsync("Hello World!");
// );
//);
app.UseCors("CorsPolicy");
app.Use(async (context, next) =>
await next();
if (context.Response.StatusCode == 404 &&
!Path.HasExtension(context.Request.Path.Value) &&
!context.Request.Path.Value.StartsWith("/api/"))
context.Request.Path = "/index.html";
await next();
);
//app.UseMvcWithDefaultRoute();
app.UseDefaultFiles();
app.UseStaticFiles();
我已通过此链接How to enable CORS in ASP.net Core WebAPI 阅读了有关如何在 Internet 上解决此错误的信息,但在我的情况下没有成功。请不要介意我是 Web 开发的新手,并且在 CORS 策略错误上我已经卡了好几天了。请帮助我如何解决这个错误。我还必须在我的 External Rest api 服务上启用 CORS。 谢谢!
【问题讨论】:
使用jsonp:***.com/a/2067584/240564 【参考方案1】:CORS 是服务器端“问题”,而不是客户端。所以,我想,你不应该尝试在你的客户端上修复它(即,Angular,即使它托管在 X 服务器类型上)。这就是为什么,我认为,您的 ASP.net 修复程序不起作用。尝试在客户端修复 CORS,虽然有时可能,但大多数时候会导致错误或只是服务器忽略/阻止请求。
最简单的方法是在您的服务器端配置 CORS。您已指定您正在访问外部 REST API。因此,您必须深入挖掘并忘记客户端修复。
【讨论】:
是的,我已经弄清楚了,问题出在 External Rest API 服务器端,我已经启用了 CORS,现在它可以工作了。以上是关于从托管在被 CORS 策略阻止的 Asp.net 核心 Web 服务器中的 Angular 应用程序调用我的休息服务的主要内容,如果未能解决你的问题,请参考以下文章
azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源
即使在配置 ASP.NET Core Web API 中启用了 CORS,CORS 也会阻止发布请求
如何修复 - 重新登录时,CORS 策略已阻止访问“https://login.windows.net......”获取
仅在文件上传中出现 Asp.Net Core API CORS 策略错误
来自 ASP NET Web API 的 CORS 阻止 Ajax POST 调用 - 对预检请求的响应未通过访问控制检查