Wie lassen Sie eine Web -API in C# .NET 8.0 eine 200 Antwort zur Erfüllung einer CORS -Vorfilsanforderung senden?
Posted: 11 Apr 2025, 10:35
Ich habe eine ASP.NET Core 8.0 -Web -API erstellt, die im Google -Skript und von einer von Notepad erstellten Website funktioniert. Wenn ich jedoch versuche, mit ihm von einer externen Site mit ihm zu kommunizieren, wirft es einen CORS -Fehler
Zugriff auf das Fetch unter 'https://a.someting.edu/Newsletter/api/Anewslslter' von Ursprungs -POSPLAGE 'ASSACTICE. Prüfung der Zugriffskontrolle: Es gibt keinen Http OK -Status
Mein Programm.cs Datei:
In meinem Programm enthalten.cs Datei CORS Middleware, die ich auf Microsoft Learn CORs, das gleiche Problem gefunden habe, und ich bin mir nicht sicher, ob ich das richtig eingerichtet habe, da ich den Antwortheader auf dem Webserver noch so festlegen muss, dass ich auf die Kontroll-Owl-Owl-Owl-Owl-Owl-Own = * zugreifen muss. Dies wird durch die Datei web.config verifiziert:
Ich habe versucht, den Modus auf No-CORs festzulegen, dies führt jedoch zu einem nicht unterstützten Fehler mit Medienart 415.
Zugriff auf das Fetch unter 'https://a.someting.edu/Newsletter/api/Anewslslter' von Ursprungs -POSPLAGE 'ASSACTICE. Prüfung der Zugriffskontrolle: Es gibt keinen Http OK -Status
Mein Programm.cs Datei:
Code: Select all
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();
< /code>
Frontend HTML JavaScript -Code < /p>
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);
}
Code: Select all
< /code>
Controller -Code < /p>
[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");
}
}
< /code>
Modellcode < /p>
namespace NewsletterEmails.Models
{
public class NewsletterItem
{
[Key]
public required string Email { get; set; }
}
}