0

기존 ASP.NET 기술을 기반으로 한 기존 웹 사이트 중 하나가 새 호스팅으로 이동되었습니다. 이제 우리 사이트가 .NET Framework 4.6.1에서 실행되는 Windows Azure Pack을 실행하는 클라우드입니다.ASP.NET의 사용자 정의 오류 페이지에 HTTP 상태 404를 반환 할 수 없음

그러나 올바른 HTTP 상태 404를 가진 존재하지 않는 .aspx 리소스에 대한 사용자 지정 오류 페이지를 반환 할 수 없습니다. 상태는 항상 302입니다. 원래 맞춤 404 오류 페이지는 웹에서 이와 같이 정의되었습니다. 설정 : 내가 this 같은 게시물을 읽고 ResponseRewrite에 redirectMode 설정을 포함하여 제안 된 답변을했지만, 아무것도 도움이되지 않거나 예상대로 작동하지 않았다

<system.web> 
    <customErrors mode="RemoteOnly" defaultRedirect="/error/server-error.aspx"> 
     <error statusCode="404" redirect="/error/resource-not-found.aspx"/> 
    </customErrors> 
</system.web> 

.

내가 놓친 것이 있습니까? 아니면 다른 해결책이 있습니까?

답변

0

나는이 문제를 극복 할 수있었습니다. 먼저 웹에서 오류 404에 대한 리디렉션을 해제했습니다.구성은 :

<system.web> 
    <customErrors mode="RemoteOnly" defaultRedirect="/error/server-error.aspx"> 
     <!-- <error statusCode="404" redirect="/error/resource-not-found.aspx"/> --> 
    </customErrors> 
</system.web> 

그런 다음 내에서 Global.asax에 다음함으로써 Application_Error 이벤트 처리기를 추가 :

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) 
    Dim serverError As HttpException = DirectCast(Server.GetLastError(), HttpException) 

    If Not serverError Is Nothing Then 
     If 404 = serverError.GetHttpCode() Then 
      Server.ClearError() 
      Server.Transfer("/error/resource-not-found.aspx") 
     End If 
    End If 
End Sub 

마지막으로, 내 오류 404 페이지에 아래 라인을 추가 (발견 된 자원 없습니다. aspx) :

Sub Page_Load() 
    ' If you're running under IIS 7 in Integrated mode set, 
    ' use this line to override IIS errors: 
    Response.TrySkipIisCustomErrors = True 

    Response.StatusCode = 404 
    Response.StatusDescription = "Page not found" 
End Sub 

FYI : MasterPage 기술을 사용하는 경우 MasterPage의 변수 부분 만 리디렉션됩니다. 웹 사이트의 다양한 섹션에서 존재하지 않는 리소스로 재생 한 후, 나는이 행동이 우리의 최종 사용자에게 영리하고 유용하다는 것을 알게되었습니다.

하나 더. 비 ASPX 자원에 대한 HTTP 404 상태 코드를 반환하려면, 내 Web.config의에서 다음과 같은 설정을 사용 :

<system.webServer> 
    <httpErrors errorMode="Custom" defaultResponseMode="Redirect"> 
     <remove statusCode="404"/> 
     <error statusCode="404" path="/error/resource-not-found.aspx" responseMode="ExecuteURL"/> 
    </httpErrors> 
</system.webServer> 

에주의를 오류 404

0

는 난 그냥 인터넷 검색을했다 .ASPX 와 많은 일을하지 않은 당신이 페이지를 404.aspx 당신은 상단에

<% Response.StatusCode = 404 %> 

이있는 경우 궁금하네요?

+0

I에 대한 'ExecuteURL'로 설정 responseMode에 이것을 Page_Load에 추가하면 404 페이지로 순환 무한 리디렉션됩니다. – TecMan

1

그러나, 나는 여전히 올바른 HTTP 상태 404 존재하지 않는에서 .aspx 리소스에 대한 사용자 지정 오류 페이지를 반환 할 수 없습니다 - 상태는 지금까지 내가 알려진 바와 같이 항상 302

입니다 , HTTP 302은 요청 된 리소스가 다른 위치로 이동되었음을 의미합니다. 사용자의 설명을 기반으로 ASP.NET 웹 애플리케이션을 생성하고 제공 한 사용자 정의 오류 구성을 사용하여 Azure Web App에 배포했습니다. 요청한 리소스가 발견되지 않는 경우 피들러 또는 개발자 도구를 통해 다음과 같이, 당신은 응답 헤더를 얻을 수 CustomErrors가

의 모드 해제

  1. 를 켭 : 여기

    내 자세한 테스트입니다 귀하의 브라우저에서.

  2. 당신이 제공하는 구성, 요청 된 리소스가 발견되지 않을 때, 당신은 세부 사항을 얻을 수와 RemoteOnly

    로에 CustomErrors의 모드를 다음 설정과 같이

테스트 결과, 필자는 내 측면과 Azure 웹 응용 프로그램. Fiddler를 통해 302 응답을 받으면 위치 헤더를 확인하십시오. 또한 자원이 발견되지 않고 브라우저가 404 상태 코드와 함께 resource-not-found.aspx 페이지로 리다이렉트하기를 원한다면 다음을 수행 할 수 있습니다. thread.

+0

내 질문에 내가 작성한 내용을 왜 다시 작성 했습니까? 하지만 관련 스레드에 대한 링크를 통해 제 문제에 대한 부분적인 해결책을 찾을 수있었습니다. 내 대답을 보라. – TecMan