[iis-7] IIS Express가 아닌 IIS7에서 WebApi의 { “message”: “오류가 발생했습니다”}

ASP.NET MVC 4 WebApi로 작업하고 있으며 IIS Express의 로컬 컴퓨터에서 실행하는 데 많은 재미가 있습니다. 원격 컴퓨터에도 서비스를 제공하도록 IIS Express를 구성 했으므로 회사의 다른 회사도 내 컴퓨터를 웹 서버로 사용하고 있습니다.

이것이 최적이 아닌 솔루션이라고 결정한 후 .NET 4.5를 설치 한 후 WebApi를 원격 서버에 배치하기로 결정했습니다. 피들러를 사용하고 로컬 컴퓨터의 컨트롤러에 POST를 보내면 올바른 응답을 반환하지만 도메인을 IIS7을 실행하는 웹 서버로 변경하면 동일한 POST가 암호를 반환합니다

{ “message”: “오류가 발생했습니다”}

메시지. 아무도 무슨 일이 일어나고 있는지 알고 있습니까?



답변

문제는 서버에 없었지만 로컬 컴퓨터에있는 종속성이 누락되었습니다. 우리의 경우에는 Devart.Data.Linq dll이었습니다.

그 대답을 얻기 위해 IIS 추적을 500 오류로 설정했습니다. 약간의 정보를 제공했지만 web.config 설정에서 실제로 도움이 된 것은 <system.web><customErrors mode="Off"/></system.web>동적으로로드 된 종속성이 누락되었음을 나타냅니다. 이 종속성을 추가하고 로컬로 복사하도록 지시하면 서버가 작동하기 시작했습니다.


답변

원래:

IncludeErrorDetailPolicy대신 CustomErrors해결되지 않으면 대신 사용하십시오 (예 : ASP.NET 스택이> 2012 인 경우).

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy
= IncludeErrorDetailPolicy.Always;

참고 : 자세한 오류 정보를 반환하면 민감한 정보가 ‘해커’에게 공개 될 수 있습니다. 아래의이 답변에 대한 Simon의 의견을 참조하십시오.

TL; DR 버전

나를 위해 CustomErrors정말 도움이되지 않았습니다. 이미 (으)로 설정 Off되었지만 여전히 잘못된 an error has occurred메시지 만 받았습니다 . 나는 받아 들여진 대답이 3 년 전부터 오늘날 웹 단어에서 오랜 시간이라고 생각합니다. Web API 2와 ASP.NET 5 (MVC 5)를 사용하고 있으며 Microsoft는 IIS 전용 전략에서 멀어졌습니다.CustomErrors 졌지만 오래된 skool IIS입니다.

어쨌든, 나는 현지에서 가지고 있지 않은 생산에 문제가있었습니다. 그런 다음 개발자 컴퓨터에서와 같이 Chrome의 네트워크 탭에 오류가 표시되지 않습니다. 결국 프로덕션 서버에 Chrome을 설치 한 다음 서버 자체의 앱 (예 : ‘localhost’)을 탐색하여 문제를 해결했습니다. 그런 다음 스택 추적과 함께 더 자세한 오류가 나타납니다.

그 후에야 지미 보가드 ( Jimmy Bogard)에서이 기사를 찾았습니다 (참고 : 지미 AutoMapper입니다! ). 재미있는 점은 그의 기사가 2012 년이지만 기사에서 CustomErrors더 이상 도움이되지 않지만 IncludeErrorDetailPolicy전역 WebApi 구성 (예 :)에서 다르게 설정하여 ‘오류 세부 사항’을 변경할 수 있다고 이미 설명했습니다 WebApiConfig.cs.

GlobalConfiguration.Configuration.IncludeErrorDetailPolicy
= IncludeErrorDetailPolicy.Always;

다행히 그는 또한 webapi (2)가 귀하의 말을 듣도록 설정하는 방법을 설명합니다 CustomErrors 설정을 . 그것은 꽤 현명한 접근 방식이며 2012 : P로 돌아갈 수 있습니다.

참고 : 기본값은 ‘LocalOnly’이며이 게시물을 찾기 전에 설명 된 방식으로 문제를 해결할 수 있었던 이유를 설명합니다. 그러나 모든 사람이 브라우저를 프로덕션 및 시작하기 위해 원격으로 할 수는 없다는 것을 이해합니다 (저는 프리랜서 및 DevOps로 가기로 결정하기 전까지는 불가능했습니다).


답변

다른 답변들 중 어느 것도 나를 위해 일하지 않았습니다.

이것은 : (Startup.cs에서)

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var config = new HttpConfiguration();

        WebApiConfig.Register(config);

        // Here: 
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    }
}

또는 WebApiConfig.cs에 넣을 수 있습니다.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        // Here: 
        config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
    }
}


답변

테스트 환경에서 오류가 발생하면 항상이 질문에 도달하고 “이전에 해본 적이 있지만 코드를 수정하고 테스트 환경에 다시 배포하지 않고도 web.config에서 바로 수행 할 수 있습니다. , 그러나 2 가지 변경이 필요합니다 … 다시 무엇입니까? “

향후 참조를 위해

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

<system.webServer>
  <httpErrors errorMode="Detailed" existingResponse="PassThrough"></httpErrors>
</system.webServer>


답변

WebAPI 끝점에 게시 할 때 비슷한 문제가 발생했습니다. CustomErrors = Off를 설정하면 dll 중 하나 인 실제 오류를 볼 수있었습니다.


답변

누군가에게 도움이되는 경우 :

비슷한 문제가 있었고 Nates 지침에 따라 추가했습니다.

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

이것은 오류에 대한 자세한 정보를 보여줍니다.

“ExceptionMessage”: “지정된 메타 데이터 리소스를로드 할 수 없습니다.”, “ExceptionType”: “System.Data.Entity.Core.MetadataException”, “StackTrace”: “at System.Data.Entity.Core.Metadata.Edm.MetadataArtifactLoaderCompositeResource .LoadResources (…

이것은 내가 edmx 파일을 다른 위치로 옮겼고 구성에서 연결 문자열 노드를 변경하는 것을 잊었 음을 기억할 때입니다 (connectionsstrings 노드는 “configSource”를 사용하여 별도의 파일에 배치되었지만 다른 이야기입니다).


답변

내 swagger XML 파일이 \ bin에 배포되지 않았습니다.

GlobalConfiguration.Configuration
  .EnableSwagger(c =>
  {
    c.SingleApiVersion("v1", "SwaggerDemoApi");
    c.IncludeXmlComments(string.Format(@"{0}\bin\SwaggerDemoApi.XML",
                         System.AppDomain.CurrentDomain.BaseDirectory));
    c.DescribeAllEnumsAsStrings();
  })

http://wmpratt.com/swagger-and-asp-net-web-api-part-1/

여기에 이미지 설명을 입력하십시오

릴리스 구성과 디버그 구성에서 설정해야했습니다.