2

Azure REST API アプリを発行すると、奇妙な結果が表示されます

1) 「すべての」レコードの Get メソッドは期待どおりに機能し、次のように生成されます。

public async Task<HttpOperationResponse<IList<DomainType>>> GetAllDomainObjectsWithOperationResponseAsync(...);

2) Get by idUpdateDeleteおよびCreateメソッドの場合object、ドメイン オブジェクトの代わりに生成されます。

async Task<HttpOperationResponse<object>> DeleteDomainObjectByIdWithOperationResponseAsync(..)

その結果、この Delete、Update、Create、および GetById メソッドを使用すると、サービスが機能しません。object手動でそれぞれのドメイン タイプに置き換えると、期待どおりに動作しますが、サービスを公開するたびに間違ったコードが再作成されます...

SwaggerConfig.cs (IncludeParameterNamesInOperationIdFilterたとえば有効) からいくつか試してみましたが、この場合は役に立たないようです。

これを引き起こしている原因とそれを処理する方法についてのアイデアはありますか?

DateTimePS asDateTimeOffset?byteas を生成するなど、もっと不快な動作に気付きましたが、それは我慢byte[]できます。定期的に戦いたくないのは、生成されたすべてのコードを調べて、object型を適切なドメイン型に変更することです。この場合、コンパイラは役に立ちません...

編集

@olydis からのコメントによると、生成された swagger 定義ファイルに form の戻り値の型定義が欠落していることが判明しました$ref, "#/definition/domain-type"

MVA コースでは、Azure App Service の習得(モジュール 4. ディスカバリーの統合のデモンストレーション、3:33 前後) に、生成された Swagger 定義ファイルのサンプルが表示され、これらの型定義が存在します。Swashbuckle がこの情報を生成しない原因は何ですか? 最新の Swashbuckle バージョン 5.xx を持っています。Swashbuckle が Swagger ファイルを正しく生成するために、ドメイン タイプが満たさなければならない前提条件はありますか?

Swagger 定義ファイル

編集#2

現在の回避策

REST API クライアントを生成する前に、生成された Swagger 定義ファイルを手動で編集する

4

1 に答える 1

0

Swagger JSON ファイルの作成方法について、Swashbuckle にヒントを与えることができます (fwiw - 現在、swagger doc を Open API doc と呼ぶ人もいます)。

これにより、Web API に新しい編集をロールアウトする必要があるときに、生成されたコードを再調整する必要がなくなりました。

using Swashbuckle.Swagger.Annotations;

namespace MyCorp.WebApi.Controllers
{
  [Authorize]
  public class CrazyObjectController : ODataController
  {
    private MyDbModel db = new MyDbModel();

    [SwaggerResponse(HttpStatusCode.Created, Type = typeof(CrazyObject))]
    [SwaggerResponse(HttpStatusCode.BadRequest, Description = "Invalid Request")]
    [Authorize(Roles = "AdminAccess")]
    public async Task<IHttpActionResult> Post(CrazyObject crazObj)
    {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            db.CrazyObjects.Add(crazObj);
            await db.SaveChangesAsync();

            return Created(crazObj);
        }
  }
}

上記のブロックでは、マジックは属性 line: で実装され、 これはこれを 201 応答コード[SwaggerResponse(HttpStatusCode.Created, Type = typeof(CrazyObject))]に関連付けます。Type

于 2017-07-18T11:44:35.170 に答える