ASP.NET Core Web API — Blazor WASM — ошибка CORS через некоторое времяC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ASP.NET Core Web API — Blazor WASM — ошибка CORS через некоторое время

Сообщение Anonymous »

У меня есть веб-API ASP.NET Core 8 и Blazor Wasm на .NET 8, JWT
В 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]
Я видел здесь много QA и разные способы его реализации.
Что-то мне не хватает?
Также в первый раз, когда сработало, использовал это:
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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»