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)에 의존하는 페이지를 표시하려고하면 루프.
'Programing' 카테고리의 다른 글
git의 병합 커밋 메시지를 어떻게 사용자 정의 할 수 있습니까? (0) | 2020.11.21 |
---|---|
PHP 애플리케이션에 MySQL 대신 Redis를 사용하는 경우 (0) | 2020.11.21 |
방화범 : iframe으로 cd하는 방법 (0) | 2020.11.21 |
Nginx로 하나의 서버에서 두 사이트 제공 (0) | 2020.11.21 |
Android에서 캔버스로 원을 그리는 방법은 무엇입니까? (0) | 2020.11.21 |