Мой веб-сайт позволяет создавать и сохранять тесты, и это с моей стороны работает просто отлично, не только в режиме разработки, но и в опубликованной рабочей версии.
Один человек из Индии пытается помочь мне загрузить тесты, но он получает Cors связанные ошибки постоянно. Независимо от того, что я пытаюсь отключить Cors, он всегда получает ошибку при нажатии «Сохранить». Что бы я ни пытался - из разных потоков SO - всегда приводит к разным ошибкам, каждая из которых длиннее и запутаннее.
Это мой ajax-вызов jQuery, который нужно сохранить:
Код: Выделить всё
Javascript:
Код: Выделить всё
function saveTest() {
var test = generateTestJson(true);
if (test == Result.KO) return false;
toastMessage(Texts.processingData, InformationState.INFORMATION, true, Config.informationTimeout);
var saveMode = SaveMode.Insert;
if (selectedTestId != "") {//Update
saveMode = SaveMode.Update;
testId = selectedTestId
} else {//Save
//check for duplicates
var testName = document.getElementById("Name").value;
var testExists = ddlItemExists("ddlTests", testName);
if (testExists) {
toastMessage(Texts.testAlreadyExists.replace("%0", testName), InformationState.ERROR, false, Config.informationTimeout);
return;
}
}
var deletedElements = generateJsonDeletedElements();
formData.delete('test');
formData.delete('saveMode');
formData.delete('deletedElements');
//
formData.append('test', test);
formData.append('saveMode', saveMode);
formData.append('deletedElements', deletedElements);
$.ajax({
url: '/Test/SaveTest',
method: 'POST',
contentType: false,
processData: false,
data: formData,
success: function (data) {
if (data.status == Result.OK) {
selectedTestId = testId;
formSubmitted = true;
fillTestSelector();
}
showResultStatus(data.status, data.message);
},
error: function (xhr, status, error) {
clearTimeout(informationTimer);
showToast(xhr.responseText, InformationState.ERROR, false, true, "3");
}
})
}
Код: Выделить всё
Program.cs:
Код: Выделить всё
...
builder.Services.AddCors(options =>
{
options.AddPolicy("MyPolicy",
policy =>
{
policy
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(origin => true); // allow any origin
}
);
});
var app = builder.Build();
app.UseAuthentication();
app.UseAuthorization();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseWebOptimizer();
//app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCors("TestMePolicy");
var locOptions = app.Services.GetService();
app.UseRequestLocalization(locOptions.Value);
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapRazorPages();
app.Run();
Код: Выделить всё
[HttpPost]
[EnableCors("MyPolicy")]
public async Task SaveTest(string test, int saveMode, List files, string deletedElements = "")
Также непонятно то, что с моей стороны он работает даже без всего этого кода "Program.cs" для отключения Cors, но не с Индия.
Мне действительно нужно полностью отключить Cors, и я проверил множество потоков SO, но безрезультатно.
Любая помощь?
Подробнее здесь: https://stackoverflow.com/questions/786 ... sable-cors