ASP.NET核心CORS标头未显示

时间:2016-08-23 09:26:47

标签: asp.net cors asp.net-core asp.net-core-1.0 asp.net-core-middleware

我有一个文件 - 新项目 - 我的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==?=

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

$.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?

1 个答案:

答案 0 :(得分:0)

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

[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();
}