WebApi和Swagger

时间:2017-01-05 17:56:38

标签: asp.net wpf rest autorest

我使用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(成功),我该如何选择。

提前致谢。 斯科特

1 个答案:

答案 0 :(得分:1)

您可以发布您正在生成并传递给AutoRest的swagger文件吗?

返回类型转换为object(或所有可能响应之间共享的任何公共基类)的原因是因为AutoRest将显式定义的响应视为返回值。例外仅用于default响应。

我们正在调查指定多个错误响应的方法,这些错误响应将生成相应的异常。