swagger-ui는 배포 후 500을 반환합니다.


79

기본 구성은 내 컴퓨터에서 완벽하게 작동하며 전혀 문제가 없습니다.

하지만 테스트 환경에 배포하면 다음 메시지가 표시됩니다.

500 : { "메시지": "오류가 발생했습니다." } / api / swagger / docs / v1

여기에 이미지 설명 입력 배포는 default web site/api

나는 그것이 baseUrl 또는 이와 비슷한 것과 관련이 있다고 생각하지만 어디서 시작 해야할지조차 모릅니다.

내 경로는 프로젝트 내에서 잘 작동합니다. 모든 webapi 끝점을 호출 할 수 있으며 올바르게 응답합니다.

어떤 도움이라도 대단히 감사하겠습니다

답변:


167

디버깅 할 때 디버그 구성 (내가 XmlComments를 생성 한 속성-> 빌드 탭-> 출력-> XML 문서 파일)을 사용하고있었습니다.

릴리스 구성을 위해이 작업을 수행하지 않았습니다. (duh ...)-이제 모든 것이 작동합니다.


나는 같은 문제가 있었다. 내 배포가 Azure에 있고 여전히 문제가 있습니다. stackoverflow.com/questions/39406820/...
user2128702

1
내 배포는 하늘빛에 있었지만 간단한 것을 잊었습니다. 프로젝트 속성을 변경하여 릴리스 모드 용 XML 파일도 생성하십시오!
Karl Gjertsen

디렉토리는 무엇이어야합니까?
Zapnologica

@Zapnologica는 swagger 구성에 파일이있는 위치에 따라 다릅니다.
VisualBean

그것은 나를 위해 일했지만 이제는 모든 메소드의 모든 응답 본문에 똑같은 오류가 나타납니다. "메시지": "오류가 발생했습니다." 지금 어디를보아야합니까? 감사합니다
Johannes Wentu

22

@VisualBean 감사합니다.

나에게는 그렇게 분명하지 않았기 때문에 .... 방법 ... 간단한 이미지.

프로젝트> 프로젝트 속성> 빌드 탭

여기에 이미지 설명 입력


10

Swashbuckle은 web.config의 customErrors 설정으로 인해 실제 오류 메시지를 숨기고 있습니다. customErrors를 off로 설정하면 더 나은 오류 메시지가 표시됩니다.

<system.web>
    <customErrors mode="Off"/>
</system.web>

첫 번째 답변이 효과가없는 경우. 이 제안 (사용자 정의 오류 모드 켜기)을 사용하여 프로그램에서 무슨 일이 일어나고 있는지 확인하십시오. 저에게는 누군가가 API 컨트롤러 중 하나에 모호한 엔드 포인트를 도입했음을 깨달았습니다. 이 문제를 바로 잡은 순간 우리 모두 괜찮 았습니다.
Seun S. Lawal

3

허용 대답에 명시된 바와 같이 당신은 반드시 XML 문서 파일 출력에 확인해야 이 아닌 빈 \ 디버그 또는 빈 \ 릴리스 (모든 빌드 구성에 대해이를 확인).

여러 XML 문서 파일을 사용하기 때문에 여전히 500 응답을 받았습니다. 내에서 SwaggerConfig의 구현 나는이 개 프로젝트합니다 (WebApi 프로젝트 자체와 WebApi 프로젝트에서 참조하는 클래스 라이브러리)에서 XML 문서 파일을 포함 :

c.IncludeXmlComments(string.Format(@"{0}\bin\MyWebApiProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));
c.IncludeXmlComments(string.Format(@"{0}\bin\ReferencedProject.xml", System.AppDomain.CurrentDomain.BaseDirectory));

WebApi 프로젝트의 XML 문서 파일은 사이트의 bin 폴더에 올바르게 게시되었지만 참조 된 프로젝트의 XML 문서 파일은 그렇지 않았습니다 ( 컴파일 된 프로젝트 의 bin 폴더에 표시 되더라도 ).

따라서 텍스트 편집기에서 WebApi 프로젝트 파일 (.csproj)을 수정하고 맨 아래에 다음 섹션을 추가해야합니다 ( ReferencedProject 대체 ).

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
  <CopyAllFilesToSingleFolderForMsdeployDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
  </CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\ReferencedProject\bin\ReferencedProject.xml" />
    <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>bin\%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

VS2010 웹 배포 패키지를 사용하여 추가 파일을 어떻게 포함합니까?를 참조하십시오 . 자세한 설명은.


이에 대한 변형으로 아래 링크에 설명 된대로 csproj가 아닌 pubxml 파일에 사용자 지정 마크 업을 추가했습니다. 또한 Include=bin\*.xml명시 적으로 지정할 필요없이 참조 된 모든 프로젝트의 xml을 포함하는 데 사용됩니다 . docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/…
Joe

0

문제는 실행이다 dotnet publish와 함께하는 -r ReleaseXML 파일을 생성하지 않습니다. 그러나 dotnet publish함께 -r Debug실제로 수행하는 파일을 생성한다. 이것은 사람들이 로컬이 아닌 다른 환경에 배포 할 때만이 문제가 발생하는 이유를 설명하고 예외가 prod에서만 발생하는 경우 스스로 발로 차는 이유를 설명합니다. (ITS THE RELEASE) reporoduce하려면 해당 명령을 로컬에서 실행하고 출력을보기 만하면됩니다. 디렉토리와 문제를 볼 수 있습니다.

(업데이트) 나를위한 수정 사항은 실제로 .csproj 파일로 이동하여 파일이 항상 복사되도록 한 줄을 추가하는 것이 었습니다. 아래에 표시된 차이 여기에 이미지 설명 입력


1
받아 들여진 대답을 보면 아마도 이것이 왜 그런지 알 것입니다. :)
VisualBean

@VisualBean 솔루션이 속성 창을 사용하여 Output> XML을 업데이트 한 후 csproj 파일을 수정하는 것이라고 추론하는 경우 솔루션이 저에게 해결책이라고 생각하지 않으며 동일한 문제가 발생했습니다. 대신 내 디버그 및 릴리스 구성은 모두 정확히 동일하며 XML 문서 파일에 지정된 항목이 없지만 디버그 빌드는 릴리스가 아닌 디버그 용으로 해당 파일을 생성합니다.
jbooker

1
허용되는 대답은 디버그 설정뿐만 아니라 릴리스 설정에서 XML 주석을 켜는 것입니다.
Karl Gjertsen 2017-06-30

@KarlGjertsen, "XML 켜기"란 정확히 무엇을 의미합니까? 실제로 "XML 문서 경로"에 값을 배치한다는 뜻입니까? 이것은 나에게 수정이 아니었기 때문에, 이것이 수정이라는 구체적인 증거가 있는지 알고 싶습니다. "수정은 XYZ"라고 말하는 구절입니다. 나를위한 해결책은 msbuild에 의존하는 대신 소스 제어에 문서를 추가하는 것이 었습니다.
jbooker

프로젝트 설정의 확인란을 선택하면 XML 주석 파일이 자동 생성됩니다. Dubuffet 빌드를 위해 이것을 설정했지만 릴리스 빌드는 설정하지 않았습니다.
Karl Gjertsen

0

허용되는 대답은 가장 먼저 시도해야합니다.

그러나 XML 출력이 App_Data \로 이동하도록 설정되어 있고 Swashbuckle이 해당 디렉터리에서 읽도록 구성되었으므로 어떤 방식으로 빌드되는지는 중요하지 않습니다. xml 파일이 '거기에'있을 것입니다. 그럼에도 불구하고 여전히 오류가 발생했습니다 ...

MSDN 포럼 @ enough2012의 답변 에서 찾았습니다 .

게시 대화 상자의 "설정"창에있는 "파일 게시 옵션"에서 "대상에서 추가 파일 제거"를 선택합니다.

매력처럼 일했다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.