【问题标题】:WebApi and SwaggerWebApi 和 Swagger
【发布时间】:2017-01-06 02:16:07
【问题描述】:

我正在使用 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(成功),我该如何获取。

提前致谢。 斯科特

【问题讨论】:

    标签: asp.net wpf rest autorest


    【解决方案1】:

    您能否发布您正在生成并传递给 AutoRest 的 swagger 文件?

    返回类型变为object(或在所有可能的响应之间共享的任何公共基类)的原因是因为 AutoRest 将明确定义的响应视为返回值。异常仅用于default 响应。

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

    【讨论】:

    • 嗨加勒特。您是否建议作为最终答案?如果是这样,我会接受。我只是想确保我没有错过任何对 asp 来说相当新的东西。谢谢斯科特
    • 是的,您几乎只需要使用default 来响应错误,AutoRest 就会为这些错误生成异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多