web-dev-qa-db-ja.com

スワッシュバックルエラーのデバッグ-API定義のロードに失敗しました

Swashbuckle/Swaggerエラーでスタックトレースまたは内部例外を取得する方法はありますか?ある時点で、機能しなくなりました。 .Net Core 2.0から2.1にアップグレードしたときだったのかどうかはわかりませんが、その後も引き続き機能していたと思います。 myapidomain/swagger/index.htmlに移動すると、次のエラーが発生します。

enter image description here

これはあまり役に立ちません。 2週間ほど前に動作していました... Swaggerの構成は変更しませんでした。これまでと同じです。

public void ConfigureServices(IServiceCollection services)
{
    ...
     services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info
            {
                Version = "v1",
                Title = "My.API",
                Description = "Test"
            });
        });   
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
        app.UseDeveloperExceptionPage();
    else
        app.UseHsts();

    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "PropWorx API V1");
    });
    ...
}

ASP.Net Core 2.1 Web APIでSwashbuckle.AspNetCore 3.0.0を使用しています。

9

UIデバッグは実際には役に立たないことに同意しますが、ブラウザーのデバッグツール(ChromeのF12など)を開き、/swaggerエンドポイントを更新して、swagger.jsonペイロードを調べることで、完全な例外トレースを取得できます。これは、XHRリクエストです。これは500ステータスコードで失敗します。

(私は大きなプロジェクトでリンクをブックマークすることをお勧めします。そうすれば、将来、https://MyHost/swagger/v1/swagger.jsonなどのjsonファイルに直接進むことができます)

例えば以下の不自然なエラーで、2つのメソッド間で同じルートを複製しました。

[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum([FromQuery] MyEnum someEnum)
...

[HttpGet]
[Route("parseenum")]
public ActionResult CheckEnum2([FromQuery] MyEnum someEnum)
...

エラーが発生します:

SwaggerError

これを追跡して修正できるはずです。

15
StuartLC

私は今日この問題を抱えており、それを解決するために多くのことを試みます。たとえば、次のコードのようなC#コントローラーコードの[http]タグの前にすべての[ルート]を削除する必要があります。

    [Route("~/api/getAll")]
    [HttpGet]
    public ActionResult<List<asteriksModel>>GetAll()
    {
        return _context.asterList.ToList();
    }

そしてあなたのルートコードはこのようなものでなければなりません

    [HttpGet]
    public ActionResult<List<asteriksModel>>GetAll()
    {
        return _context.asterList.ToList();
    }

私のプロジェクトではそれはうまくいきます、

0
MsDeveloper

APIに同じ2つ以上の_[HttpGet]_がある場合、動作しません。 [HttpGet]、[HttpGet ("{id}")]を指定する必要があります

_  [HttpGet]
`[HttpGet ("{id}")]`
_
0