我使用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);
}
}
我碰巧在WebApi中出现了一个基于AutoMapper错误的错误,但它被吞没了。它在响应中返回一条错误消息,这很好。
以下是此次通话的当前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(成功),我该如何选择。
提前致谢。 斯科特
答案 0 :(得分:1)
您可以发布您正在生成并传递给AutoRest的swagger文件吗?
返回类型转换为object
(或所有可能响应之间共享的任何公共基类)的原因是因为AutoRest将显式定义的响应视为返回值。例外仅用于default
响应。
我们正在调查指定多个错误响应的方法,这些错误响应将生成相应的异常。