Programing

ASP.Net에서 상태 코드 500을 보내고 여전히 응답에 쓰는 방법은 무엇입니까?

lottogame 2020. 11. 21. 08:17
반응형

ASP.Net에서 상태 코드 500을 보내고 여전히 응답에 쓰는 방법은 무엇입니까?


500 개의 내부 서버 오류 상태 코드 가 포함 된 응답으로 오류를 반환 할 수 있어야 하는 ASP.Net 단일 파일 웹 서비스 ( 구현이 .ashx포함 된 파일 IHttpHandler)가 있습니다 . 이것은 PHP에서 수행하는 비교적 간단한 작업입니다.

header("HTTP/1.1 500 Internal Server Error");
header("Content-Type: text/plain");
echo "Unable to connect to database on $dbHost";

해당 ASP.Net (C #)은 다음과 같아야합니다.

Context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
Context.Response.ContentType = "text/plain";
Context.Response.Write("Unable to connect to database on " + dbHost);

물론 이것은 예상대로 작동하지 않습니다. 대신 IIS는 500 상태 코드를 가로 채고 내가 Response개체에 작성한 내용을 삭제 하고 앱 구성 방법에 따라 디버그 정보 또는 사용자 지정 오류 페이지를 보냅니다.

내 질문-이 IIS 동작을 억제하고 내 IHttpHandler구현 에서 직접 오류 정보를 보내 려면 어떻게해야합니까?

이 앱은 PHP의 포트입니다. 클라이언트 측은 이미 작성되었으므로 본질적으로이 사양을 고수합니다. 200 상태 코드로 오류를 보내는 것은 슬프게도 틀에 맞지 않습니다.

이상적으로는 " 이 파일 편집 "및 " 이 IIS 설정 변경 "보충 지침 없이 배포하려는 SDK의 일부이므로 프로그래밍 방식으로 동작을 제어해야합니다 .

감사!

편집 : 정렬 됨. Context.Response.TrySkipIisCustomErrors = true티켓이었다. 와.


Context.Response.TrySkipIisCustomErrors = true


과거에 다음을 사용했으며 Page_Load 메서드에서 아래 표시된 코드를 사용하여 사용자 지정 메시지와 함께 503 오류를 발생시킬 수있었습니다. 로드 밸런서 뒤에있는이 페이지를로드 밸런서가 서버가 서비스 중인지 여부를 알 수있는 ping 페이지로 사용합니다.

도움이 되었기를 바랍니다.

        protected void Page_Load(object sender, System.EventArgs e)
    {
        if (Common.CheckDatabaseConnection())
        {
            this.LiteralMachineName.Text = Environment.MachineName; 
        }
        else
        {
            Response.ClearHeaders();
            Response.ClearContent(); 
            Response.Status = "503 ServiceUnavailable";
            Response.StatusCode = 503;
            Response.StatusDescription= "An error has occurred";
            Response.Flush();
            throw new HttpException(503,string.Format("An internal error occurred in the Application on {0}",Environment.MachineName));  
        }
    }

customErrors 페이지를 설정할 수 있습니다 (web.config를 통해 구성 가능). 세션의 요청에 걸쳐 (또는 대체 메커니즘을 통해) 콘텐츠를 저장 한 다음 사용자 지정 출력을 표시하는 사용자 지정 오류 페이지를 표시하도록 asp.net을 구성 할 수 있습니다.

하지만주의 할 점 : 애플리케이션의 근본적인 문제 (예 : StackOverflowException)로 인해 500이 발생하고 asp.net (예 : MyCustomErrors.aspx)에 의존하는 페이지를 표시하려고하면 루프.

자세한 내용은 이 페이지를 확인 하십시오 .

참고 URL : https://stackoverflow.com/questions/4495961/how-to-send-a-status-code-500-in-asp-net-and-still-write-to-the-response

반응형