Я потратил дни, пытаясь понять это. Все примеры, которые я нашел, не работают или я чего-то не понимаю. У меня есть веб-интерфейс .netCore, который в настоящее время работает на https: // localhost: 5001, и автономная веб-сборка Blazor на https: // localhost: 5002. Из blazor я инициирую http-запрос:
protected async override void OnInitialized()
{
base.OnInitialized();
string reqUrl = $"https://localhost:5001/api/District/";
var response = await http.GetAsync(reqUrl);
}
на webapi у меня есть файл startup.cs:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
// For Entity Framework
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ConnStr")));
// For Identity
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
// Adding Authentication
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
// Adding Jwt Bearer
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.RequireHttpsMetadata = false;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidAudience = Configuration["JWT:ValidAudience"],
ValidIssuer = Configuration["JWT:ValidIssuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWT:Secret"]))
};
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder =>
{
builder.WithOrigins("https://localhost:5002/");
});
});
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseCors("CorsPolicy");
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
Я получаю эту ошибку при выполнении:
Доступ к выборке на https: // localhost: 5001 / api / District / 'from origin' https: // localhost: 5002 'заблокирован политикой CORS: заголовок' Access-Control-Allow-Origin 'отсутствует запрашиваемый ресурс. Если непрозрачный ответ соответствует вашим потребностям, установите для режима запроса значение «no-cors», чтобы получить ресурс с отключенным CORS.
Может ли кто-нибудь предложить изменение, чтобы эта работа работала? Я зашел в MS Docs, но это все равно что пытаться читать Коран на арабском ...
app.UseCors("CorsPolicy");
передapp.UseAuthorization();
. - person Rena   schedule 24.07.2020