ASP.Net에서 상태 코드 500을 보내고 응답에 쓰는 방법은 무엇입니까?
ASP.Net 단일 파일 웹 서비스(a)가 있습니다..ashx
를 포함하는 파일IHttpHandler
500개의 내부 서버 오류 상태 코드로 오류를 반환할 수 있어야 합니다.이것은 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
'programing' 카테고리의 다른 글
wp-admin에서 페이지의 제목을 편집할 수 없도록 하려면 어떻게 해야 합니까? (0) | 2023.06.17 |
---|---|
안드로이드 응용 프로그램에서 직접 Google Play Store를 여는 방법은 무엇입니까? (0) | 2023.06.17 |
문자열을 snake_case에서 Ruby의 CamelCase로 변환하는 중 (0) | 2023.06.17 |
오라클에 null 값이 있는 열 합계 (0) | 2023.06.17 |
Oracle SQL*Plus에서 LOB 열의 전체 내용을 표시하는 방법은 무엇입니까? (0) | 2023.06.17 |