私は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 (成功した) が返されたかどうかを確認するにはどうすればよいですか。
前もって感謝します。スコット