В API программа выглядит так.
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policy =>{policy.AllowAnyMethod().AllowAnyHeader().SetIsOriginAllowed(origin => true).AllowCredentials();});
});
...
var app = builder.Build();
...
app.UseCors();
Я развернул, и все работает нормально. Спустя почти неделю я начал получать эту ошибку:
Доступ к загрузке по адресу «https://backend.net/api/packages/fullpackage» из источника. https://frontend.com» заблокирован политикой CORS: в запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Если вам подходит непрозрачный ответ, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.
Когда я смотрю на перед полетом, я понял.
access-control-allow-credentials: true access-control-allow-headers:
authorization,content-type методы контроля доступа: POST
И запрос получает это.
URL: https://backend.net/api/packages/fullpackage Метод: POST-код:
500 Директива о внутренней ошибке сервера: strict-origin-when-cross-origin
< /blockquote>
Это случается один раз, но мне это действительно нужно в Интернете. Посмотрев везде, я попробовал переключиться с хоста API, и это снова сработало. Это было где-то неделю назад, сейчас у меня та же проблема.
Я уже пробовал эти вещи:
- Изменение CORS с указанием URL-адреса интерфейса
- Перезапуск пула приложений
- Очистка пула приложений
- Очистка кеша
- Очистка пула приложений
- Очистка кэша
- li>
Добавление пользовательской политики и включение контроллера с помощью [EnableCors(PolicyName="name"] - Отключите CORS в контроллере с помощью [ DisableCors]
Что-то мне не хватает?
Также в первый раз, когда сработало, использовал это:
app.UseCors(x => x
.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(origin => true)
.AllowCredentials());
Затем я переключился на конструктор, как я сказал вначале, но это не сработало, пока я не сменил хост и URL.
Спасибо за заранее
Изменить, это полный код:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using System.Text;
using System.Text.Json.Serialization;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers().AddJsonOptions(x => x.JsonSerializerOptions.ReferenceHandler = ReferenceHandler.IgnoreCycles);
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "TSystem API", Version = "v1" });
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description = @"JWT Authorization header using the Bearer scheme.
Enter 'Bearer' [space] and then your token in the text input below.
Example: 'Bearer 12345abcdef'
",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey,
Scheme = "Bearer"
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement()
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
},
Scheme = "oauth2",
Name = "Bearer",
In = ParameterLocation.Header,
},
new List()
}
});
});
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("MYLIC");
var isDev = builder.Environment.IsDevelopment;
if (isDev.Invoke())
{
//LocalConnection
builder.Services.AddDbContext(x => x.UseSqlServer("name=LocalConnection"));
}
else
{
//CloudConnection
builder.Services.AddDbContext(x => x.UseSqlServer("name=CloudConnection"));
}
builder.Services.AddTransient();
builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddScoped();
builder.Services.AddIdentity(x =>
{
x.Tokens.AuthenticatorTokenProvider = TokenOptions.DefaultAuthenticatorProvider;
x.SignIn.RequireConfirmedEmail = true;
x.User.RequireUniqueEmail = true;
x.Password.RequireDigit = false;
x.Password.RequiredUniqueChars = 0;
x.Password.RequireLowercase = false;
x.Password.RequireNonAlphanumeric = false;
x.Password.RequireUppercase = false;
x.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
x.Lockout.MaxFailedAccessAttempts = 3;
x.Lockout.AllowedForNewUsers = true;
})
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(x => x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["jwtKey"]!)),
ClockSkew = TimeSpan.Zero
});
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(policy => { policy.AllowAnyMethod().AllowAnyHeader().SetIsOriginAllowed(origin => true).AllowCredentials(); });
});
//This tried calling it from the controller
builder.Services.AddCors(options =>
{
options.AddPolicy(name: "DefaultCorsPolicy", policy => { policy.AllowAnyMethod().AllowAnyHeader().SetIsOriginAllowed(origin => true).AllowCredentials(); });
});
var app = builder.Build();
SeedData(app);
void SeedData(WebApplication app)
{
IServiceScopeFactory? scopedFactory = app.Services.GetService();
using (IServiceScope? scope = scopedFactory!.CreateScope())
{
SeedDb? service = scope.ServiceProvider.GetService();
service!.SeedAsync().Wait();
}
}
app.UseCors();
//app.UseCors(x => x
//.AllowAnyMethod()
//.AllowAnyHeader()
//.SetIsOriginAllowed(origin => true)
//.AllowCredentials());
//app.UseCors(x => x
// .AllowAnyMethod()
// .AllowAnyHeader()
// .WithOrigins("https://frontend.com") //changed the original name
// .AllowCredentials());
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Подробнее здесь: https://stackoverflow.com/questions/790 ... -some-time