WebApi 和 Swagger

WebApi and Swagger

我正在使用 asp.net webapi 并使用 swagger 通过 AutoRest 在 WPF 应用程序中创建 RestApi。 如果出现错误,我无法确定如何使用 returned 数据。

我的控制器如下;

// 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 中出现错误,但它被吞没了。它在响应中 return 显示一条错误消息,这很棒。

这是此调用的当前 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();
        }

如您所见,它需要一个整数。如果我取消注释

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

int return类型转object

所以真正的问题。 这是我从 WPF 到 WebApi

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

如果一个对象被 returned 如果发生错误或者简单的 int(成功)只是 returned 我该如何选择。

提前致谢。 斯科特

你能post你正在生成并传递给 AutoRest 的 swagger 文件吗?

return 类型变为 object(或所有可能的响应之间共享的任何公共基础 class)的原因是因为 AutoRest 将显式定义的响应视为 return 值。异常仅用于 default 响应。

我们正在研究指定将生成适当异常的多个错误响应的方法。