Это не дубликат предыдущих вопросов, потому что их решения говорят о добавлении политики CORS. Мой вопрос здесь заключается в том, почему политика CORS в этом случае игнорируется, несмотря на ее присутствие.
Я получаю основную c ASP. NET веб-страницу Core 2.1, который будет связываться с docker контейнером, работающим на localhost:5082
. (Да, NET Core 2.1 немного староват, но для нас на данный момент это неизбежное зло по причинам ведомственного типа.)
Естественно, при попытке запустить проект веб-страницы через В отладчике Visual Studio запрос AJAX на странице не выполняется при попытке доступа к этому контейнеру из-за политики CORS. Итак ... Я зашел на Startup.cs
и добавил очень либеральную политику CORS, и по какой-то причине ее игнорируют.
Я пробовал несколько похожих постов и ТАК ответы, которые все делать очень похожие вещи, но это пример того, как мой Startup.cs может выглядеть так:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace TheNamespace
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddCors(options =>
{
options.AddPolicy("AllowAll",
builder =>
{
builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseCors("AllowAll");
app.UseMvc();
}
}
}
Обратите внимание на вызовы services.AddCors
и app.UseCors
. Различные посты и SO-ответы имеют немного разные выражения этого, но все они указывают на наличие Startup.cs
, очень похожего на это.
Но это как-то игнорируется, и мои самые основные c JavaScript GET
вызов http://localhost:5082/...
все еще не удается с этим сообщением об ошибке:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5082/... (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
Что не так?
Это JavaScript, который не удается (url
- это строковое значение):
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', url, false);
//xmlHttp.setRequestHeader("Access-Control-Allow-Origin", "*");
xmlHttp.send(null);
return xmlHttp.responseText;
РЕДАКТИРОВАТЬ:
Это не проект MVC или что-либо необычное. При создании проекта я просто выбрал опцию для Web Application
. Так что сейчас у него нет контроллеров, только страницы.
РЕДАКТИРОВАТЬ:
Согласно комментариям, это в основном структура моего проекта:
Pages:
Shared:
_CookieConsentPartial.cshtml
_Layout.cshtml
_ValidationScriptsPartial.cshtml
_ViewImports.cshtml
_ViewStart.cshtml
Index.cshtml
Program.cs
Startup.cs
С точки зрения URL, это http://localhost:5082/api/buildcactus
.