代码之家  ›  专栏  ›  技术社区  ›  zango123

如何配置cors以使swagger.json可以从另一个来源消费来构建.net blazor文档门户网站

  •  0
  • zango123  · 技术社区  · 2 年前

    我有一个.net核心7 api(WebApplication1)和一个blazor应用程序(BlazorApp1)。api和blazor应用程序已经安装了swagger,我想使用blazor程序中的swagger/swagger.json在iframe中显示swagger ui。然而,我不知道如何配置api,这样我就不会出现cors错误。

    这是我的WebApplication1/Program.cs

    WebApplication1/Program.cs
    var builder = WebApplication.CreateBuilder(args);
    
    var  myAllowSpecificOrigins = "_myAllowSpecificOrigins";
    builder.Services.AddCors(options =>
    {
        options.AddPolicy(name: myAllowSpecificOrigins,
            policy  =>
            {
                policy
                    .AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader();
            });
    });
    // Add services to the container.
    
    builder.Services.AddControllers();
    // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (app.Environment.IsDevelopment())
    {
        app.UseSwagger();
        app.UseSwaggerUI();
    }
    
    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseCors(myAllowSpecificOrigins);
    app.UseAuthorization();
    
    app.MapControllers();
    
    app.Run();
    

    这是我的BlazorApp1/Program.cs

    //BlazorApp1/Program.cs
    using BlazorApp1.Data;
    
    var builder = WebApplication.CreateBuilder(args);
    
    
    // Add services to the container.
    builder.Services.AddRazorPages();
    builder.Services.AddServerSideBlazor();
    builder.Services.AddSingleton<WeatherForecastService>();
    builder.Services.AddControllers();
    builder.Services.AddSwaggerGen();
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }
    
    app.UseSwagger();
    app.UseSwaggerUI(options => options.SwaggerEndpoint("https://localhost:44323/swagger/v1/swagger.json","v1"));
    
    app.UseHttpsRedirection();
    
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.MapBlazorHub();
    app.MapFallbackToPage("/_Host");
    
    app.Run();
    

    WebApplication1正在上运行https://localhost:44323 BlazorApp1正在上运行https://localhost:7145

    无论我如何调整api中的cors配置,我都会得到以下结果: enter image description here

    0 回复  |  直到 2 年前
        1
  •  0
  •   zango123    2 年前

    这就是解决问题的方法:

    var builder = WebApplication.CreateBuilder(args);
    
    
    // Add services to the container.
    
    builder.Services.AddControllers();
    // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    
    var app = builder.Build();
    app.Use((ctx, next) =>
    {
        ctx.Response.Headers["Access-Control-Allow-Origin"] = "https://localhost:7145";
        return next();
    });
    // Configure the HTTP request pipeline.
    if (app.Environment.IsDevelopment())
    {
        app.UseSwagger();
        app.UseSwaggerUI();
    }
    
    
    app.UseHttpsRedirection();
    app.UseRouting();
    
    app.UseAuthorization();
    
    app.MapControllers();
    
    app.Run();