ASP.NET 核心 CORS 标头未显示

Posted

技术标签:

【中文标题】ASP.NET 核心 CORS 标头未显示【英文标题】:ASP.NET core CORS headers not showing 【发布时间】:2016-12-30 01:22:14 【问题描述】:

我的 VS 2015 中有一个文件 - 新项目 - MVC Web 应用程序,在 netcoreapp1.0 上运行,导入:“dotnet5.6”和“portable-net45+win8”,它具有返回数组的标准值 api字符串。

在我的 Startup.cs 中,我只添加了以下行:

services.AddCors(opt => opt.AddPolicy("test", p => p.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().Build()));

services.AddMvc() 之前的 ConfigureServices 方法。 在 Configure 方法中,我添加了 app.UseCors("test") 以使用该策略:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    app.UseCors("test");

    app.UseMvc();

当我在 Postman 中调用这个 api 时,我得到了这些响应头:

Content-Type →application/json; charset=utf-8
Date →Tue, 23 Aug 2016 08:35:19 GMT
Persistent-Auth →true
Server →Kestrel
Transfer-Encoding →chunked
X-Powered-By →ASP.NET
X-SourceFiles →=?UTF-8?B?XFxiaWp0amVzLmJlXGRhdGFcaG9tZWRpclxuaWxzZ1x2aXN1YWwgc3R1ZGlvIDIwMTVcUHJvamVjdHNcV2ViQXBwbGljYXRpb240XHNyY1xXZWJBcHBsaWNhdGlvbjRcYXBpXHZhbHVlcw==?=

当我使用 JQuery 从我们的 SharePoint 网站(例如,可以是任何网站,只是为了确保它不是来自本地主机)调用它时:

$.ajax(url: 'http://localhost:60079/api/values', success: function(data) console.log(data); , error: function(err) console.error(err);  );

我收到了这些响应标头(荷兰语):

Antwoord    HTTP/1.1 200 OK
Transfer-Encoding   chunked
Content-Type    application/json; charset=utf-8
Server  Kestrel
X-SourceFiles   =?UTF-8?B?XFxiaWp0amVzLmJlXGRhdGFcaG9tZWRpclxuaWxzZ1x2aXN1YWwgc3R1ZGlvIDIwMTVcUHJvamVjdHNcV2ViQXBwbGljYXRpb240XHNyY1xXZWJBcHBsaWNhdGlvbjRcYXBpXHZhbHVlcw==?=
Persistent-Auth true
X-Powered-By    ASP.NET
WWW-Authenticate    Negotiate oRswGaADCgEAoxIEEAEAAACO2brFdOYicQAAAAA=
Date    Tue, 23 Aug 2016 09:04:48 GMT

没有发送预检请求,在 IE 11 网络监视器中,只发送了 1 个请求。

如标头所示,没有添加 CORS 标头。

我也在我拥有的 ASP.NET Core RC1 应用程序中尝试过这个,它也没有显示任何标题。

我认为 CORS 正在工作,因为我可以从任何 Origin 访问 api。 但是,如果我使用“WithOrigin()”,例如不添加 SharePoint,它仍然允许我调用 URL。 我还在 Fiddler、Chrome 和 Firefox 中对此进行了测试,它们都没有显示标题。

如何在 ASP.NET Core 中添加标头并使用 WithOrigins() 保护我的 API?

【问题讨论】:

我的 .NET Core 2.0 应用程序目前遇到了同样的问题。您有没有想过如何将标头添加到响应中? 【参考方案1】:

我遇到了同样的问题。我尝试了为这个问题找到的所有答案,但对我没有任何帮助。因此,由于“正确的方法”不起作用,我决定手动进行:

[HttpOptions]
public IActionResult YourMethod()

    Response.Headers.Add("Access-Control-Allow-Origin", "*");
    Response.Headers.Add("Access-Control-Allow-Methods", "OPTIONS,POST");
    Response.Headers.Add("Access-Control-Allow-Headers", "*");
    return Ok();

【讨论】:

以上是关于ASP.NET 核心 CORS 标头未显示的主要内容,如果未能解决你的问题,请参考以下文章

React + ASP.Net Core 3:CORS 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

Asp.net Core、JWT 和 CORS 标头

未设置 CORS 标头

无法在 ASP.Net Core Web api 中启用 CORS

在 ASP.NET 中,对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

ASP.NET Core 2.2 CORS 没有“Access-Control-Allow-Origin”标头 [关闭]