2017-01-05 42 views
0

我正在使用asp.net webapi並使用Swagger通過AutoRest在WPF應用程序中創建RestApi。 我有問題搞清楚如何使用返回的數據,如果有錯誤。WebApi和Swagger

我的控制器如下;

// 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返回類型轉爲對象。

所以真正的問題。 這裏是WPF我的服務調用的WebAPI

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

如果一個對象返回我怎麼收拾如果發生錯誤,或者簡單的int(在成功)剛剛返回。

在此先感謝。 Scott

回答

1

您可以發佈您生成並傳遞給AutoRest的swagger文件嗎?

返回類型轉換爲object(或所有可能的響應之間共享的任何通用基類)的原因是因爲AutoRest將顯式定義的響應視爲返回值。例外僅用於default響應。

我們正在研究如何指定多個錯誤響應來生成適當的異常。

+0

感謝您回覆我。 – scottsanpedro

+0

嗨加勒特。你建議作爲最終答案嗎?如果是這樣,我會接受。我只是想確保我沒有錯過任何對asp相當陌生的東西。謝謝Scott – scottsanpedro

+0

是的,你幾乎只需要使用'default'作爲你的錯誤響應,而AutoRest就會爲這些產生異常。 –