У меня есть веб-приложение File - New Project - MVC в моем VS 2015, работающее на netcoreapp1.0 с импортом: «dotnet5.6» и «portable-net45 + win8», в котором есть стандартные значения api, возвращающие массив строк.
В моем Startup.cs я только добавил строку:
services.AddCors(opt => opt.AddPolicy("test", p => p.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().Build()));
в метод ConfigureServices перед services.AddMvc (). А к методу 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();
}
Когда я вызываю этот api в Postman, я получаю следующие заголовки ответа:
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 работают, потому что я могу получить доступ к api из любого источника. Однако, если я использую WithOrigin () и, например, не добавляю SharePoint, он все равно позволяет мне вызывать URL-адрес. Я также тестировал это в Fiddler, Chrome и Firefox, ни один из них не показывает заголовки.
Как я могу добавить заголовки в ASP.NET Core и защитить свои API с помощью WithOrigins ()?