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 返回类型变为对象。

所以真正的问题。这是我从 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 回答