>

ASP Net Boilerplate을 사용하여 만든 C # 코드 및 API를 생성하려고했지만 응답이 올바르게 직렬화 해제되지 않습니다.

조사 결과 json 응답은 "AjaxResponse"라는 클래스를 사용하여 랩핑 된 것으로 보인다. 그러나 swagger.json은 메소드 응답에이 유형을 포함하지 않습니다.

랩핑 된 결과를 설명하는 C # Swagger 클라이언트를 구축하는 방법을 아는 사람이 있습니까?


  • 답변 # 1

    Aspnet 보일러 플레이트는 AjaxResponse 내에서 실제 결과를 감 쌉니다. AjaxResponse 클래스는 제네릭 형식 클래스입니다. 결과를 줄 바꿈하면 런타임에 Swaggergen Tool이 올바른 프록시 클래스를 생성하지 못합니다. 따라서 Swagger가 잡은 API의 서명은 원시 결과입니다 (랩핑되지 않음).

    따라서 유일한 해결책은 솔루션 전체에 자동 래퍼를 비활성화하는 것입니다. Web.Core 프로젝트의 PreInitialize () 메소드에 2 행을 추가하십시오. 문제가 해결되었습니다.

    와이즈 비즈

  • 답변 # 2

    개별 응용 방법에 [DontWrapResult]/[WrapResult] 속성을 사용할 수도 있습니다

    Configuration.Modules.AbpAspNetCore().DefaultWrapResultAttribute.WrapOnError = false;

    Configuration.Modules.AbpAspNetCore().DefaultWrapResultAttribute.WrapOnSuccess = false;

    이 작업을 수행 할 수 없으면 클라이언트 쪽에서도 동일한 변경을 수행 할 수 있습니다 :

    다음 수업 추가 :

    [WrapResult(LogError =false, WrapOnSuccess = true, WrapOnError = true)]
    SomeApplicationServiceMethod()
    [DontWrapResult(LogError =false, WrapOnError=false ,WrapOnSuccess=false)]
    SomeApplicationServiceMethod()
    
    

    생성 된 클라이언트 메소드에서 모든 역 직렬화 지점을 교체하십시오 :

    public class RequestResultAJAX<T>
        {
            public bool success { get; set; }
            public T result { get; set; }
            public string error { get; set; }
            public string targetUrl { get; set; }
            public string unAuthorizedRequest { get; set; }
            public string __abp { get; set; }
        }
    
    

    기준

    result_ = Newtonsoft.Json.JsonConvert.DeserializeObject<Dto>(responseData_, _settings.Value);
    
    

    반환 결과 전에 성공/오류 체크를 추가합니다.

  • 이전 javascript - $interval 동안 윈도우가 업데이트되지 않습니다
  • 다음 plsql에서 n 숫자의 합을 인쇄