2016-11-17 9 views
2

내 푸른 REST API 응용 프로그램을 발표 이상한 결과를 "모든"레코드(실종 #/정의/도메인 일부를 입력합니다)

1) 취득 방법이있다 예상대로 다음, 그 생성 방법 :

public async Task<HttpOperationResponse<IList<DomainType>>> GetAllDomainObjectsWithOperationResponseAsync(...); 

2) Get by id, Update, DeleteCreate 및 방법에 대해,이 도메인 대신에 오브젝트의 object 생성된다

async Task<HttpOperationResponse<object>> DeleteDomainObjectByIdWithOperationResponseAsync(..) 

결과적으로이 Delete, Update, Create 및 GetById 메서드를 사용할 때 서비스가 작동하지 않습니다. 만약 내가 수동으로 각각의 도메인 유형으로 object을 교체하면 예상대로 작동하지만, 각 서비스가 게시 된 후에 잘못된 코드가 다시 생성됩니다 ...

SwaggerConfig.cs (예 : IncludeParameterNamesInOperationIdFilter 사용)에서 몇 가지 시도했지만, 이 경우에는 도움이되지 않는 것 같습니다.

문제의 원인과 해결 방법에 대한 아이디어가 있습니까?

P. 나는 좀 더 불쾌한 행동을 발견했습니다. DateTimeDateTimeOffset?으로, bytebyte[]으로 만들었지 만, 그걸로 살 수 있습니다. 내가 정기적으로 적절한 도메인 유형에 object 유형을 변경하기 위해 모든 생성 된 코드를 겪고에서 싸우고 싶지 않아 - ...이 경우 컴파일러는 도움이되지 수

편집

@olydis의 의견에 따르면, 생성 된 Swagger 정의 파일에는 반환 형식 정의가 누락되었습니다 (형식 : $ref, "#/definition/domain-type").

MVA course Mastering Azure App Service (모듈 4 : Demonstration Integrating Discovery 3:33)은 생성 된 스 래거 정의 파일의 샘플이며이 유형 정의가 있습니다. Swashbuckle에서이 정보를 생성하지 못하게 할 수있는 요인은 무엇입니까? 최신 버전 인 Swashbuckle 버전 5.x.x가 있습니다. Swagger 파일을 올바르게 생성하려면 Swashbuckle에서 도메인 유형이 충족해야하는 전제 조건이 있습니까?

Swagger definition file

편집 # 2

현재 주위에 작업

수동으로 Swashbuckle 힌트를 줄 수있는 REST API 클라이언트

+1

이것이 자동 복구 문제인 경우 해당 스 거거 파일을 게시하면이 문제를 재현 할 수 있습니다. 또한 Swagger를 자동 생성하는 것처럼 들립니다. Swashbuckle? 그렇다면 태그를 추가하십시오 ;-) 아마 Swagger가 잘못된 Swagger를 생성 할 때 문제가 생길 수 있습니다 - AutoRest는 그 곳에서 설명하는 것을 지원합니다 – olydis

+0

@olydis, 안녕하세요, 감사합니다! swagger 정의 파일에 대한 링크를 추가했습니다. 그리고 Azure REST API 앱을 게시 할 때 genereated됩니다 - 내 프로젝트에'Swashbuckle' nuget 팩을 추가했습니다. 그래서이 Swagger 생성 작업을 수행하고있는 것 같습니다 ... 나는이 swagger/swashbuckle 항목에 익숙하지 않습니다. 그래서 아마도 이것은 쉬운 일입니다 ... 예를 들어 - REST API 클라이언트의 GetPromotionById는 도메인 객체 대신 객체로 생성됩니다. 그러나 흥미로운 점은 - 브라우저에서 느슨하게 놀면이 방법이 효과가 있다는 것입니다. 생성 된 REST API 클라이언트로 작업 할 때만 문제가 발생합니다. – Prokurors

+1

제공 한 Swagger 파일에서 'GetPromotionById'에는 반환 유형 정의가 없으므로 AutoRest는 사용할 도메인 유형을 발명 할 수 없습니다! Swashbuckle에 대한 전문가는 아니지만 서비스를 충분히 자세히 설명하는 Swagger를 생성하지는 않습니다. 또한 'byte [byte]'는 실제로 벨을 울리고, 지난번에 그 문제가 발생했을 때, 그것은 Swashbuckle의 비추천 버전이었습니다! – olydis

답변

0

를 생성하기 전에, 생성 된 자신감 정의 파일을 편집 Swagger JSON 파일을 작성하는 방법 (일부는 이제 Swagger doc을 Open API 문서로 참조).나는 위의 블록에서 내 웹 API

using Swashbuckle.Swagger.Annotations; 

namespace MyCorp.WebApi.Controllers 
{ 
    [Authorize] 
    public class CrazyObjectController : ODataController 
    { 
    private MyDbModel db = new MyDbModel(); 

    [SwaggerResponse(HttpStatusCode.Created, Type = typeof(CrazyObject))] 
    [SwaggerResponse(HttpStatusCode.BadRequest, Description = "Invalid Request")] 
    [Authorize(Roles = "AdminAccess")] 
    public async Task<IHttpActionResult> Post(CrazyObject crazObj) 
    { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      db.CrazyObjects.Add(crazObj); 
      await db.SaveChangesAsync(); 

      return Created(crazObj); 
     } 
    } 
} 

새로운 편집을 출시 할 때

내 생성 된 코드를 다시 조정할 필요가에서 저를 유지하고있다, 마법 속성 라인으로 구현된다 : [SwaggerResponse(HttpStatusCode.Created, Type = typeof(CrazyObject))]Type과 201 응답 코드를 연결합니다.