首页 > 解决方案 > 由于使用 Swagger 发布 ASP.NET Core / .NET 5.0,因此无法在本地调试 API

问题描述

由于我已经在 Azure Web 服务和 Azure SQL 数据库上发布了我的 API,我无法在本地使用我的 API,它运行但 Swagger 说加载 API 定义失败,我不知道它是否与连接有关字符串或其他东西,但我不能再在本地调试,这是一个大问题。

这是我的 startup.cs 代码:

public class Startup
{
    public Startup(IConfiguration configuration,
                   IWebHostEnvironment env)
    {
        Configuration = configuration;
        Env = env;
    }

    public IConfiguration Configuration { get; }
    public IWebHostEnvironment Env { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        //if (Env.IsDevelopment())
        //{
        //    services.AddPersistenceServicesDevelopment(Configuration);
        //}

        services.AddPersistenceServicesProduction(Configuration);
        services.AddApplicationServices();
        services.AddIdentityServices(Configuration);
        services.AddControllers()
            .AddNewtonsoftJson(options =>
            {
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            }); ;
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("AppAPI", new OpenApiInfo
            {
                Title = "AppAPI",
                Version = "v1"
            });

            c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
            {
                Description = @"JWT Authorization header using the Bearer scheme. \r\n\r\n 
                  Enter 'Bearer' [space] and then your token in the text input below.
                  \r\n\r\nExample: '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<string>()
                }
            });
        });
    }

    // 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.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "AppAPI v1");
            });
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthentication();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

太感谢了 !

标签: c#asp.net-coreswaggerasp.net-core-webapi.net-5

解决方案


你需要用 http 动作动词来装饰你的动作方法。只需确保每个操作方法都用 http 动词和独特的路线装饰,例如

[HttpGet("products")]
 public IActionResult GetProducts()
 {
    //Some logic
    return OK();
 }

推荐阅读