在 .net 核心 webAPI 中启用 CORS
Posted
技术标签:
【中文标题】在 .net 核心 webAPI 中启用 CORS【英文标题】:enabling CORS in .net core webAPI 【发布时间】:2019-07-16 05:44:49 【问题描述】:我已经安装了 NuGet 包 Microsoft.AspNetCore.Cors 2.2.0 然后在我的 .net 核心 webAPI Startup.cs 中,我完成了以下操作:
public void ConfigureServices(IServiceCollection services)
......
services.AddCors();
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseCors(options =>
options.WithOrigins("http://localhost:52556")
.AllowAnyMethod()
.AllowAnyHeader());
app.UseMvc();
然后,当我在控制台中从我的 Angular 应用程序发送发布请求时,我看到了这个错误:
在“http://localhost:52556/api/PaymentDetail”访问 XMLHttpRequest 来自原点“http://localhost:4200”已被 CORS 策略阻止: 对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。
我以为我已经启用了 CORS,但似乎有什么东西阻止了它。有什么办法可以解决这个问题?
【问题讨论】:
你做错了。在localhost:52556
运行的任何东西都不认可原点localhost:4200
。我不知道您将显示的代码放在其中的哪个位置,但它的来源错误。
删除 options.WithOrigins 或添加 localhost:4200 ,这样可以正常工作。
【参考方案1】:
我通过注释/属性在 C# 中解决了同样的问题,
[System.Web.Http.Cors.EnableCors(origins: "http://localhost:4200", headers: "*", methods: "*")]
public class StudentsController : ApiController
在 MVC 中, 使用,
// For Action,
[HttpGet]
[EnableCors("AllowSpecificOrigin")]
public IEnumerable<string> Get()
// For Controller,
[Route("api/[controller]")]
[EnableCors("AllowSpecificOrigin")]
public class ValuesController : ControllerBase
在你的情况下,用这个替换如果特定于端口号进程4200
,
options.WithOrigins("http://localhost:4200");
或者你可以输入No Restrictions
,
app.UseCors("NoRestrictions");// To config
// To service
services.AddCors(options =>
options.AddPolicy("NoRestrictions",
builder => builder.WithOrigins("*").AllowAnyHeader().AllowAnyMethod());
);
检查来源是什么,
1) 检查端口号(e.g. 8080 or 8888)
2)域和子域(e.g. google.com or google.net)
3) 架构(e.g. http or https)
注册来源,
进入Startup.ConfigureServices
并致电services.AddCors();
public void ConfigureServices(IServiceCollection services)
services.AddCors();
现在启用 cors,
转至Startup.Configure
并致电app.UseCors(builder =>
builder.WithOrigins("http://google.com"));
【讨论】:
【参考方案2】:试试这个方法。我认为这是因为您只允许带有“http://localhost:52556”的 URL。使用“*”将启用所有 URL,如果您愿意,可以将其限制为任何特定的。
public void ConfigureServices(IServiceCollection services)
.........................
services.AddCors(options =>
options.AddPolicy("NoRestrictions",
builder => builder.WithOrigins("*").AllowAnyHeader().AllowAnyMethod());
);;
...............
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<AppServerSettings> appServerSettings)
..........
app.UseCors("NoRestrictions");
..........
【讨论】:
AllowSpecificOrigin
应重命名为 NoRestrictions
以查看您的代码
@manish 我补充说,如果他愿意,他可以将其更改为任何特定的 URL。嗯谢谢你的建议。我会编辑它。【参考方案3】:
您正在为您的 asp 主机设置 Origin。
只需替换这一行
options.WithOrigins("http://localhost:52556")
与
options.WithOrigins("http://localhost:4200")
【讨论】:
以上是关于在 .net 核心 webAPI 中启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章
Angular 7 .net 核心 2.2 WebApi Windows 身份验证 CORS
如何在 Asp.Net Core 3.0 WebAPI 中启用 CORS
CORS asp.net 核心 webapi - 缺少 Access-Control-Allow-Origin 标头
在 ASP.Net Core 5 WebAPI 中启用 CORS