Swagger + Swashbuckleでエンドポイントを表示するにはどうすればよいですか?

アレクサンドラバーク

ASP.NETCoreプロジェクトにswagger + swashbuckleを追加しようとしています。Swagger UIを起動して実行できますが、完全に空です。調べてみたところ、https://github.com/domaindrivendev/Swashbuckle/issues/1058で同様の問題が見つかりましたこれにより、ルーティングが問題である可能性があると思われ[Route("testroute")]たため、クラスではなくメソッドを使用てコントローラーに明示的なルートを指定してみました。これにより、問題なく表示されるルートを追加したエンドポイントが作成されました。

すべてのエンドポイントに明示的なルートを追加することは最適ではないため、何が間違っているのでしょうか。また、すべてのエンドポイントを表示するためにSwaggerを取得するように修正するにはどうすればよいですか。

闊歩が統合されている私のスタートアップ

    public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
                        .SetBasePath(env.ContentRootPath)
                        .AddJsonFile("appsettings.json", optional: true , reloadOnChange: true);

        Configuration = builder.Build();
    }

    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.AddMvc().AddJsonOptions(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

        // Register the Swagger generator, defining one or more Swagger documents
        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
        });

        services.AddDbContext<PromotionContext>(options => options.UseSqlServer(Configuration["ConnectionStrings:Jasmine"]));
        services.AddTransient<PromotionDbInitializer>();
        services.AddTransient<IComponentHelper, ComponentHelper>();
        services.AddTransient<IComponentFileHelper, ComponentFileHelper>();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, PromotionDbInitializer promotionSeeder)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseSwagger();

        // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), specifying the Swagger JSON endpoint.
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
        });



        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Promotion}/{action=Index}/{id?}");
        });

       //Because there is not a seed method built into the EF migrations pipeline in EFCore this seeding method will interfere with the migrations when attempting to deploy the database
       //uncomment if you need to seed

       //promotionSeeder.Seed().Wait();
    }
}

GetAllメソッドとPostメソッドがtestrouteとtestFormRouteの下のswaggeruiページに表示されるが、GetメソッドとDeleteメソッドが表示されないコントローラー

public class PromotionController : Controller
{
    private PromotionContext context;
    public PromotionController(PromotionContext _context)
    {
        context = _context;
    }

    public IActionResult Index()
    {
        return View();
    }

    [HttpGet]
    [Route("testroute")]
    public IActionResult GetAll()
    {
        try
        {
            var result = context.Promotions
                            .Include(promotion => promotion.CombinabilityType)
                            .Include(promotion => promotion.ValueType)
                            .Include(promotion => promotion.Currency)
                            .Include(promotion => promotion.Components)
                                .ThenInclude(component => component.TargetType)
                            .ToList();
            return Ok(result);
        }
        catch(Exception ex)
        {
            return StatusCode(500);
        }
    }


    public IActionResult Get(string promoCode)
    {
        try
        {
            var result = context.Promotions
                                .Include(promotion => promotion.CombinabilityType)
                                .Include(promotion => promotion.ValueType)
                                .Include(promotion => promotion.Currency)
                                .Include(promotion => promotion.Components)
                                    .ThenInclude(component => component.TargetType)
                                .FirstOrDefault(x => x.PromoCode == promoCode);
            return Ok(result);
        }
        catch(Exception ex)
        {
            return StatusCode(500);
        }
    }

    [HttpPost]
    [Route("testFormRoute")]
    public IActionResult Post([FromForm] Promotion newPromotion)
    {
        try
        {
            context.Promotions.Add(newPromotion);
            context.SaveChanges();
        }
        catch(DbUpdateException ex)
        {
            return StatusCode(500);
        }

        return Ok();
    }

    [HttpDelete]
    public IActionResult Delete(string promoCode)
    {
        try
        {
            var promotion = context.Promotions.FirstOrDefault(x => x.PromoCode == promoCode);

            if(promotion != null)
            {
                context.Promotions.Remove(promotion);
                context.SaveChanges();
            }
        }
        catch(DbUpdateException ex)
        {
            return StatusCode(500);
        }

        return Ok();
    }
}
ネイサン

コントローラにルート属性を追加します。

[Route("[controller]/[action]")]
public class PromotionController : Controller
{
...

そして、アクションにHttpGet属性を設定します。

[HttpGet]
public IActionResult GetAll()
{
...

[HttpGet("{promoCode}")]
public IActionResult Get(string promoCode)
{
...

静的ルートと動的ルートをどのように組み合わせるかについて注意する必要があります。asp.netコアでの属性ベースのルーティングの詳細については、この記事確認してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Swagger UIでSwashbuckleでポート443を使用するにはどうすればよいですか?

分類Dev

動的FlaskエンドポイントのSwaggerドキュメントを作成するにはどうすればよいですか?

分類Dev

Swaggerドキュメントで複数の例を表示するにはどうすればよいですか?

分類Dev

ASP.NET Core Swagger(Swashbuckle.AspNetCore)でコントローラーの説明を定義するにはどうすればよいですか?

分類Dev

swagger-uiで特定のメソッドを非表示にするにはどうすればよいですか?

分類Dev

swagger-codegen cpprestクライアントライブラリコードを使用するにはどうすればよいですか?

分類Dev

アプリルートでswagger-uiを表示するにはどうすればよいですか?

分類Dev

OWINを使用してWebApi2用にSwashbuckleで生成されたSwaggerドキュメントにクラスとプロパティの説明を含めるにはどうすればよいですか?

分類Dev

javascript swaggerで生成されたクライアントでタイムアウトを設定するにはどうすればよいですか?

分類Dev

承認を使用するようにSwashBuckle.AspNetCore.Swaggerを設定するにはどうすればよいですか?

分類Dev

SwaggerがWebSecurityConfigをバイパスできるようにするにはどうすればよいですか?

分類Dev

KotlinをSwaggerで生成するにはどうすればよいですか?

分類Dev

swagger phpドキュメントでデフォルトのjson値を指定するにはどうすればよいですか?

分類Dev

Swaggerにowinapiコントローラーを一覧表示させるにはどうすればよいですか?

分類Dev

swagger-uiのレイアウトを変更するにはどうすればよいですか?

分類Dev

Swagger 3.0 UIでエンドポイントを非表示にする

分類Dev

Swaggerで生成されたPythonクライアントを機能させるにはどうすればよいですか?

分類Dev

swagger-uiを使用するにはどうすればよいですか?

分類Dev

SwaggerドキュメントのベースURLを変更するにはどうすればよいですか?

分類Dev

.NET Core Web APIでUIをSwaggerするためのアップロードボタンを追加するにはどうすればよいですか?

分類Dev

SwaggerGenの動的に作成された定義の代わりに、SwashbuckleのSwaggerUIを使用して静的なswagger.jsonファイルを表示するにはどうすればよいですか?

分類Dev

jsonファイルをswagger-editorにインポートすると、自動的にyamlに変換されます。これを防ぐにはどうすればよいですか?

分類Dev

SwaggerでWebApiOAuthトークンエンドポイントを表示する方法

分類Dev

OpenAPI / Swaggerでフィールドがオプションか必須かを指定するにはどうすればよいですか?

分類Dev

OpenAPI / Swaggerでフィールドがオプションか必須かを指定するにはどうすればよいですか?

分類Dev

OpenAPI / Swaggerでフィールドがオプションか必須かを指定するにはどうすればよいですか?

分類Dev

OpenApiでswagger-ui.htmlURLをカスタマイズするにはどうすればよいですか

分類Dev

Swaggerファイルをローカルで使用するにはどうすればよいですか?

分類Dev

Swaggerドキュメント-jsonリクエスト本文でコンマで区切られた値のみを取得するにはどうすればよいですか?

Related 関連記事

  1. 1

    Swagger UIでSwashbuckleでポート443を使用するにはどうすればよいですか?

  2. 2

    動的FlaskエンドポイントのSwaggerドキュメントを作成するにはどうすればよいですか?

  3. 3

    Swaggerドキュメントで複数の例を表示するにはどうすればよいですか?

  4. 4

    ASP.NET Core Swagger(Swashbuckle.AspNetCore)でコントローラーの説明を定義するにはどうすればよいですか?

  5. 5

    swagger-uiで特定のメソッドを非表示にするにはどうすればよいですか?

  6. 6

    swagger-codegen cpprestクライアントライブラリコードを使用するにはどうすればよいですか?

  7. 7

    アプリルートでswagger-uiを表示するにはどうすればよいですか?

  8. 8

    OWINを使用してWebApi2用にSwashbuckleで生成されたSwaggerドキュメントにクラスとプロパティの説明を含めるにはどうすればよいですか?

  9. 9

    javascript swaggerで生成されたクライアントでタイムアウトを設定するにはどうすればよいですか?

  10. 10

    承認を使用するようにSwashBuckle.AspNetCore.Swaggerを設定するにはどうすればよいですか?

  11. 11

    SwaggerがWebSecurityConfigをバイパスできるようにするにはどうすればよいですか?

  12. 12

    KotlinをSwaggerで生成するにはどうすればよいですか?

  13. 13

    swagger phpドキュメントでデフォルトのjson値を指定するにはどうすればよいですか?

  14. 14

    Swaggerにowinapiコントローラーを一覧表示させるにはどうすればよいですか?

  15. 15

    swagger-uiのレイアウトを変更するにはどうすればよいですか?

  16. 16

    Swagger 3.0 UIでエンドポイントを非表示にする

  17. 17

    Swaggerで生成されたPythonクライアントを機能させるにはどうすればよいですか?

  18. 18

    swagger-uiを使用するにはどうすればよいですか?

  19. 19

    SwaggerドキュメントのベースURLを変更するにはどうすればよいですか?

  20. 20

    .NET Core Web APIでUIをSwaggerするためのアップロードボタンを追加するにはどうすればよいですか?

  21. 21

    SwaggerGenの動的に作成された定義の代わりに、SwashbuckleのSwaggerUIを使用して静的なswagger.jsonファイルを表示するにはどうすればよいですか?

  22. 22

    jsonファイルをswagger-editorにインポートすると、自動的にyamlに変換されます。これを防ぐにはどうすればよいですか?

  23. 23

    SwaggerでWebApiOAuthトークンエンドポイントを表示する方法

  24. 24

    OpenAPI / Swaggerでフィールドがオプションか必須かを指定するにはどうすればよいですか?

  25. 25

    OpenAPI / Swaggerでフィールドがオプションか必須かを指定するにはどうすればよいですか?

  26. 26

    OpenAPI / Swaggerでフィールドがオプションか必須かを指定するにはどうすればよいですか?

  27. 27

    OpenApiでswagger-ui.htmlURLをカスタマイズするにはどうすればよいですか

  28. 28

    Swaggerファイルをローカルで使用するにはどうすればよいですか?

  29. 29

    Swaggerドキュメント-jsonリクエスト本文でコンマで区切られた値のみを取得するにはどうすればよいですか?

ホットタグ

アーカイブ