programing

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

powerit 2023. 6. 17. 09:47
반응형

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

ASP.Net 단일 파일 웹 서비스(a)가 있습니다..ashx를 포함하는 파일IHttpHandler500개의 내부 서버 오류 상태 코드로 오류를 반환할 수 있어야 합니다.이것은 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));  
        }
    }

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

그러나 주의 사항: 애플리케이션의 근본적인 문제(즉, StackOverflow)로 인해 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

반응형