0

私はasp.net webapiを使用しており、swaggerを使用してAutoRest経由でWPFアプリ内にRestApiを作成しています。エラーが発生した場合に、返されたデータをどのように使用するかを理解するのに問題があります。

私のコントローラーは次のとおりです。

// POST: api/Personnel
    //[SwaggerResponse(HttpStatusCode.InternalServerError ,Type = typeof(HttpError))]
    [SwaggerOperation("AddEditContract")]
    [SwaggerResponse(HttpStatusCode.OK, Description = "Add/Edit a Contract", Type =typeof(int))]        
    public IHttpActionResult Post(ContractDto value)
    {
        try
        {
            var _contractsService = new Business.ContractsService();

            var contractToSave = _contractsService.GetContractsById(value.CC_Id);

            if (contractToSave == null)
            {
                return NotFound();
            }

            var ret = _contractsService.SaveContract(value);

            if (ret > 0)
            {
                return Ok(ret);
            }
            else
            {
                return BadRequest();
            }                
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }   
    }

たまたま AutoMapper のエラーを元に WebApi 内でエラーが出ていたのですが、飲み込んでしまいました。応答でエラー メッセージが返されます。これはすばらしいことです。

この呼び出しの現在の AutoRest コードは次のとおりです。

    public static int? AddEditContract(this IBuxtedConAPI operations, ContractDto value)
        {
            return Task.Factory.StartNew(s => ((IBuxtedConAPI)s).AddEditContractAsync(value), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
        }

ご覧のとおり、int を期待しています。コメントを外すと

//[SwaggerResponse(HttpStatusCode.InternalServerError ,Type = typeof(HttpError))]

int の戻り値の型は object になります。

本当の質問です。WPF から WebApi へのサービス呼び出しは次のとおりです。

   public async Task<int> SaveContract(ContractDto entity)
    {         
        using (var db = new BuxtedConAPI())
        {
            var ret = await db.AddEditContractAsync(entity);
            return (int)ret;  
        }
    }

オブジェクトが返された場合、エラーが発生したかどうか、または単純な int (成功した) が返されたかどうかを確認するにはどうすればよいですか。

前もって感謝します。スコット

4

1 に答える 1

1

生成して AutoRest に渡す swagger ファイルを投稿できますか?

戻り値の型が変わる理由object(または、考えられるすべての応答間で共有される共通の基本クラス) は、AutoRest が明示的に定義された応答を戻り値として扱うためです。例外はdefault応答にのみ使用されます。

適切な例外を生成する複数のエラー応答を指定する方法を調査しています。

于 2017-01-05T18:16:07.540 に答える