2017-01-05 2 views
0

Я использую asp.net webapi и используя swagger для создания RestApi в приложении WPF через AutoRest. У меня возникла проблема выяснить, как использовать возвращенные данные, если есть ошибка.WebApi and 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(); 
     } 

Как вы можете видеть, его ожидают инт. Если я раскомментирую

//[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?

Причина, по которой возвращаемый тип обращается к object (или какой-либо общий базовый класс разделяется между всеми возможными ответами), заключается в том, что AutoRest рассматривает явно определенные ответы как возвращаемые значения. Исключения используются только для ответа default.

Мы изучаем способы указания нескольких ответов об ошибках, которые будут генерировать соответствующие исключения.

+0

спасибо за возвращение ко мне. – scottsanpedro

+0

Привет, Гаррет. Вы предлагаете в качестве окончательного ответа? Если так, я соглашусь. Я просто хотел удостовериться, что у меня не было ничего, что было бы довольно новым для asp. Спасибо Scott – scottsanpedro

+0

Да, вы почти наверняка должны использовать 'default' для своих ответов об ошибках, а AutoRest будет генерировать исключения для них. –

Смежные вопросы