Я создал веб-API ASP.NET Core 8.0, который отлично работает в скриптах Google и на веб-сайте, созданном в блокноте. Однако, когда я пытаюсь связаться с ним из системы управления контентом (четвертый терминал), он выдает ошибку CORS.
Доступ для загрузки по адресу «https:/». /a.someting.edu/Newsletter/api/newsletter» из источника «https://t4.something.edu» заблокирован политикой CORS: ответ на предполетный запрос не проходит проверку контроля доступа: у него нет HTTP ок, статус
Я просто пытаюсь выполнить POST и не понимаю, почему это будет работать со скриптом Google и обычным сайтом, но не сайт, размещенный на CMS?
Файл My Program.cs:
var MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddCors(options =>
{
options.AddPolicy(name: MyAllowSpecificOrigins,
policy =>
{
policy.WithOrigins("https://t4.something.edu")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
builder.Services.AddControllers();
// context
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.AddCommandLine(args)
.AddUserSecrets
(true)
.Build();
builder.Services.AddDbContext(option =>
{
option.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
});
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddTransient();
builder.Services.AddScoped();
var app = builder.Build();
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseCors(MyAllowSpecificOrigins);
app.UseAuthorization();
app.MapControllers();
app.Run();
Система управления контентом Терминала 4
function send()
{
var url = 'https://a.something.edu/News/api/news';
var headers = {
'X-API-Key' : "something1234",
'Accept': "application/json",
'Content-Type': "application/json;charset=utf-8"
};
var data = {
"email" : document.getElementById("customerEmail").value
};
var payload = JSON.stringify(data);
var options = {
method: "POST",
headers: headers,
body: payload
};
try {
var response = fetch(url, options);
}catch(error) {
alert('Error is : ' + error);
}
alert('Response is - ' + response);
}
Я пытался установить режим no-cors, однако это привело к ошибке 415 неподдерживаемого типа носителя.
Включено в мою программу.cs Файл — это промежуточное программное обеспечение cors, которое я нашел в Microsoft Learn Cors, та же проблема, и я не уверен, что настроил его правильно, поскольку мне все еще нужно установить заголовок ответа на веб-сервере в Access-Control-Allow-Origin = * . Что подтверждается файлом web.config:
Не знаю, что еще можно попробовать или где искать, чтобы веб-API работал должным образом?
Обновить
Код контроллера
[Route("api/[controller]")]
[ApiController]
public class NewsletterController(NewsletterContext context) : ControllerBase
{
private readonly NewsletterContext _context = context;
[HttpPost]
public async Task PostNewsletterItem(NewsletterItem newsletterItem)
{
_context.Newsletter_Emails.Add(newsletterItem);
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
throw;
}
return Ok("The record has been saved correctly");
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... minal-four
Веб-API ASP.NET Core 8.0: проблема с Cors при использовании CMS (Терминал четыре) ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Веб-API ASP.NET Core 8 + вызов Ajax к контроллеру: полностью отключить Cors
Anonymous » » в форуме C# - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-