2017-01-05 1 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); 
     } 
    } 

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 반환 유형이 객체로 바뀝니다.

그래서 진짜 질문입니다. 다음은 WebApi 목적은 오류가 발생한 경우 또는 (성공과) 간단한 INT가 바로 반환되는 경우 내가 데리러 어떻게 반환되는 경우

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

에 WPF에서 내 서비스 호출이다.

미리 감사드립니다. Scott

답변

1

생성하고 AutoRest로 전달하는 swagger 파일을 게시 할 수 있습니까?

반환 유형이 object (또는 모든 가능한 응답간에 공통된 기본 클래스가 공유 됨)으로 바뀌는 이유는 AutoRest가 명시 적으로 정의 된 응답을 반환 값으로 처리하기 때문입니다. 예외는 default 응답에만 사용됩니다.

적절한 예외를 생성하는 여러 오류 응답을 지정하는 방법을 조사하고 있습니다.

+0

나에게 다시 연락해 주셔서 감사합니다. – scottsanpedro

+0

안녕 개렛. 당신은 최종 답변으로 제안하고 있습니까? 그렇다면 받아 들일 것입니다. 나는 asp에 상당히 새로운 것을 놓치지 않았는지 확인하고 싶었다. 감사합니다 Scott – scottsanpedro

+0

예, 오류 응답에'default'를 사용해야하고, AutoRest가 예외를 생성합니다. –