본문 바로가기
C#

[C#] Get HttpStatusCode Message

by Jcoder 2021. 8. 2.

.Net Framework 4.7.2

HttpStatusCode 열거형 (System.Net) | Microsoft Docs

public string GetResponseCode(HttpStatusCode httpStatusCode)
{
    string responseMessage = string.Empty;

    if ((int)httpStatusCode >= 300 && (int)httpStatusCode < 400)
    {
        // 300
        if (httpStatusCode.Equals(HttpStatusCode.MultipleChoices) || httpStatusCode.Equals(HttpStatusCode.Ambiguous))
        {
            responseMessage = "HTTP 상태 300에 해당합니다. Ambiguous는 요청된 정보에 여러 가지 표현이 포함되어 있는 경우에 표시됩니다. 기본적으로 이 상태는 리디렉션으로 처리되며 그 다음에 이 응답과 연결된 Location 헤더의 내용이 나옵니다. Ambiguous는 MultipleChoices의 동의어입니다. MultipleChoices는 요청된 정보에 여러 가지 표현이 포함되어 있는 경우에 표시됩니다. 기본적으로 이 상태는 리디렉션으로 처리되며 그 다음에 이 응답과 연결된 Location 헤더의 내용이 나옵니다. MultipleChoices는 Ambiguous의 동의어입니다.";
        }
        // 301
        else if (httpStatusCode.Equals(HttpStatusCode.MovedPermanently) || httpStatusCode.Equals(HttpStatusCode.Moved))
        {
            responseMessage = "HTTP 상태 301에 해당합니다. Moved는 요청된 정보가 Location 헤더에 지정한 URI로 이동된 경우에 표시됩니다. 이 상태가 반환되면 기본적으로 응답과 관련된 Location 헤더를 따릅니다. 원래의 요청 메서드가 POST이면 리디렉션된 요청은 GET 메서드를 사용합니다. Moved는 MovedPermanently의 동의어입니다. MovedPermanently는 요청된 정보가 Location 헤더에 지정한 URI로 이동된 경우에 표시됩니다. 이 상태가 반환되면 기본적으로 응답과 관련된 Location 헤더를 따릅니다.MovedPermanently는 Moved의 동의어입니다.";
        }
        // 302
        else if (httpStatusCode.Equals(HttpStatusCode.Found) || httpStatusCode.Equals(HttpStatusCode.Redirect))
        {
            responseMessage = "HTTP 상태 302에 해당합니다. Redirect는 요청된 정보가 Location 헤더에 지정된 URI에 있는 경우에 표시됩니다. 이 상태가 반환되면 기본적으로 응답과 관련된 Location 헤더를 따릅니다. 원래의 요청 메서드가 POST이면 리디렉션된 요청은 GET 메서드를 사용합니다. Redirect은 Found의 동의어입니다. RedirectMethod는 POST를 수행하여 클라이언트를 Location 헤더에 지정된 URI로 자동으로 리디렉션합니다. Location 헤더에서 지정한 리소스에 대한 요청은 GET을 사용하여 수행됩니다.RedirectMethod는 SeeOther의 동의어입니다.";
        }
        // 303
        else if (httpStatusCode.Equals(HttpStatusCode.SeeOther) || httpStatusCode.Equals(HttpStatusCode.RedirectMethod))
        {
            responseMessage = "HTTP 상태 303에 해당합니다. SeeOther는 POST를 수행하여 클라이언트를 Location 헤더에 지정된 URI로 자동으로 리디렉션합니다. Location 헤더에서 지정한 리소스에 대한 요청은 GET을 사용하여 수행됩니다. SeeOther는 RedirectMethod의 동의어입니다. RedirectMethod는 POST를 수행하여 클라이언트를 Location 헤더에 지정된 URI로 자동으로 리디렉션합니다. Location 헤더에서 지정한 리소스에 대한 요청은 GET을 사용하여 수행됩니다.RedirectMethod는 SeeOther의 동의어입니다.";
        }
        // 304
        else if (httpStatusCode.Equals(HttpStatusCode.NotModified))
        {
            responseMessage = "HTTP 상태 304에 해당합니다. NotModified는 클라이언트의 캐시된 복사본이 최신인 경우에 표시됩니다. 리소스의 내용이 전송되지 않습니다.";
        }
        // 305
        else if (httpStatusCode.Equals(HttpStatusCode.UseProxy))
        {
            responseMessage = "HTTP 상태 305에 해당합니다. UseProxy는 요청이 Location 헤더에 지정된 URI에 있는 프록시 서버를 사용해야 하는 경우에 표시됩니다.";
        }
        // 306
        else if (httpStatusCode.Equals(HttpStatusCode.Unused))
        {
            responseMessage = "HTTP 상태 306에 해당합니다. Unused는 전체가 지정되지 않은 HTTP/1.1 사양에 대한 제안된 확장명입니다.";
        }
        // 307
        else if (httpStatusCode.Equals(HttpStatusCode.TemporaryRedirect) || httpStatusCode.Equals(HttpStatusCode.RedirectKeepVerb))
        {
            responseMessage = "HTTP 상태 307에 해당합니다. RedirectKeepVerb는 요청 정보가 Location 헤더에 지정된 URI에 있는 경우에 표시됩니다. 이 상태가 반환되면 기본적으로 응답과 관련된 Location 헤더를 따릅니다. 원래의 요청 메서드가 POST이면 리디렉션된 요청도 POST 메서드를 사용합니다. RedirectKeepVerb는 TemporaryRedirect의 동의어입니다. TemporaryRedirect는 요청 정보가 Location 헤더에 지정된 URI에 있는 경우에 표시됩니다. 이 상태가 반환되면 기본적으로 응답과 관련된 Location 헤더를 따릅니다.원래의 요청 메서드가 POST이면 리디렉션된 요청도 POST 메서드를 사용합니다.TemporaryRedirect는 RedirectKeepVerb의 동의어입니다.";
        }
    }
    else
    {
        switch (httpStatusCode)
        {
            case HttpStatusCode.Continue: // 100
                responseMessage = "HTTP 상태 100에 해당합니다. Continue는 클라이언트에서 요청을 계속 수행할 수 있는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.SwitchingProtocols: // 101
                responseMessage = "HTTP 상태 101에 해당합니다. SwitchingProtocols는 프로토콜 버전 또는 프로토콜을 변경 중인 경우에 표시됩니다.";
                break;
            case HttpStatusCode.OK: // 200
                responseMessage = "HTTP 상태 200에 해당합니다. OK는 요청이 성공하여 요청된 정보가 응답 중인 경우에 표시됩니다. 이 코드는 일반적으로 수신되는 상태 코드입니다.";
                break;
            case HttpStatusCode.Created: // 201
                responseMessage = "HTTP 상태 201에 해당합니다. Created는 요청에 대한 결과로 응답이 보내지기 전에 새 리소스가 만들어진 경우에 표시됩니다.";
                break;
            case HttpStatusCode.Accepted: // 202
                responseMessage = "HTTP 상태 202에 해당합니다. Accepted는 요청에 대한 추가 처리가 허용되는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.NonAuthoritativeInformation: // 203
                responseMessage = "HTTP 상태 203에 해당합니다. NonAuthoritativeInformation은 메타 정보를 원본 서버 대신 캐시된 복사본에서 가져왔으므로 잘못될 수 있는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.NoContent: // 204
                responseMessage = "HTTP 상태 204에 해당합니다. NoContent는 요청이 처리된 다음 응답이 빈 경우에 표시됩니다.";
                break;
            case HttpStatusCode.ResetContent: // 205
                responseMessage = "HTTP 상태 205에 해당합니다. ResetContent는 클라이언트에서 현재 리소스를 다시 로드하는 것이 아니라 다시 설정해야 하는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.PartialContent: // 206
                responseMessage = "HTTP 상태 206에 해당합니다. PartialContent는 해당 응답이 바이트 범위가 포함된 GET 요청에서 요청한 부분 응답인 경우에 표시됩니다.";
                break;
            case HttpStatusCode.BadRequest: // 400
                responseMessage = "HTTP 상태 400에 해당합니다. BadRequest는 서버에서 요청을 인식할 수 없는 경우에 표시됩니다. 해당되는 오류가 없거나, 정확한 오류를 모르거나, 고유한 오류 코드가 없는 경우 BadRequest가 전송됩니다.";
                break;
            case HttpStatusCode.Unauthorized:
                responseMessage = "HTTP 상태 401에 해당합니다. Unauthorized는 요청된 리소스에 인증이 필요한 경우에 표시됩니다. WWW-Authenticate 헤더에 자세한 인증 수행 방법이 포함되어 있습니다.";
                break;
            case HttpStatusCode.PaymentRequired:
                responseMessage = "HTTP 상태 402에 해당합니다. PaymentRequired는 나중에 사용하기 위해 예약되어 있습니다.";
                break;
            case HttpStatusCode.Forbidden:
                responseMessage = "HTTP 상태 403에 해당합니다. Forbidden은 서버에서 요청을 수행하지 않는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.NotFound:
                responseMessage = "HTTP 상태 404에 해당합니다. NotFound는 요청된 리소스가 서버에 없는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.MethodNotAllowed:
                responseMessage = "HTTP 상태 405에 해당합니다. HTTP 상태 405에 해당합니다. MethodNotAllowed는 요청된 리소스에서 요청 메서드(POST 또는 GET)를 사용할 수 없는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.NotAcceptable:
                responseMessage = "HTTP 상태 406에 해당합니다. NotAcceptable은 클라이언트가 Accept 헤더를 사용하여 리소스의 사용 가능한 표현을 허용하지 않도록 지정한 경우에 표시됩니다.";
                break;
            case HttpStatusCode.ProxyAuthenticationRequired:
                responseMessage = "HTTP 상태 407에 해당합니다. ProxyAuthenticationRequired는 요청된 프록시에 인증이 필요한 경우에 표시됩니다. Proxy-authenticate 헤더에 자세한 인증 수행 방법이 포함되어 있습니다.";
                break;
            case HttpStatusCode.RequestTimeout:
                responseMessage = "HTTP 상태 408에 해당합니다. RequestTimeout은 서버에서 예상한 시간 안에 클라이언트에서 요청을 보내지 않은 경우에 표시됩니다.";
                break;
            case HttpStatusCode.Conflict:
                responseMessage = "HTTP 상태 409에 해당합니다. Conflict는 서버에 충돌이 발생하여 요청을 수행할 수 없는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.Gone:
                responseMessage = "HTTP 상태 410에 해당합니다. Gone은 요청된 리소스를 더 이상 사용할 수 없는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.LengthRequired:
                responseMessage = "HTTP 상태 411에 해당합니다. LengthRequired는 필요한 Content-length 헤더가 없는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.PreconditionFailed:
                responseMessage = "HTTP 상태 412에 해당합니다. PreconditionFailed는 이 요청에 대해 설정된 조건이 잘못되어 요청을 수행할 수 없음을 나타냅니다. 조건은 If-Match, If-None-Match 또는 If-Unmodified-Since 등의 조건 요청 헤더를 사용하여 설정됩니다.";
                break;
            case HttpStatusCode.RequestEntityTooLarge:
                responseMessage = "HTTP 상태 413에 해당합니다. RequestEntityTooLarge는 요청이 너무 많아 서버에서 처리할 수 없는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.RequestUriTooLong:
                responseMessage = "HTTP 상태 414에 해당합니다. RequestUriTooLong은 URI가 너무 긴 경우에 표시됩니다.";
                break;
            case HttpStatusCode.UnsupportedMediaType:
                responseMessage = "HTTP 상태 415에 해당합니다. UnsupportedMediaType은 요청이 지원되지 않는 형식인 경우에 표시됩니다.";
                break;
            case HttpStatusCode.RequestedRangeNotSatisfiable:
                responseMessage = "HTTP 상태 416에 해당합니다. RequestedRangeNotSatisfiable은 범위의 시작이 리소스의 시작 이전이거나 범위의 끝이 리소스의 끝 이후이므로 리소스에서 요청한 데이터 범위를 반환할 수 없는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.ExpectationFailed:
                responseMessage = "HTTP 상태 417에 해당합니다. ExpectationFailed는 서버에서 Expect 헤더에 예상되는 작업을 수행할 수 없는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.UpgradeRequired:
                responseMessage = "HTTP 상태 426에 해당합니다. UpgradeRequired는 클라이언트가 TLS/1.0 같은 다른 프로토콜로 전환해야 함을 나타냅니다.";
                break;
            case HttpStatusCode.InternalServerError:
                responseMessage = "HTTP 상태 500에 해당합니다. InternalServerError는 서버에 일반 오류가 발생한 경우에 표시됩니다.";
                break;
            case HttpStatusCode.NotImplemented:
                responseMessage = "HTTP 상태 501에 해당합니다. NotImplemented는 서버에서 요청된 기능을 지원하지 않는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.BadGateway:
                responseMessage = "HTTP 상태 502에 해당합니다. BadGateway는 중간 프록시 서버가 다른 프록시 서버 또는 원본 서버로부터 잘못된 응답을 받은 경우에 표시됩니다.";
                break;
            case HttpStatusCode.ServiceUnavailable:
                responseMessage = "HTTP 상태 503에 해당합니다. ServiceUnavailable은 일반적으로 로드가 많거나 유지 관리 문제 때문에 일시적으로 서버를 사용할 수 없는 경우에 표시됩니다.";
                break;
            case HttpStatusCode.GatewayTimeout:
                responseMessage = "HTTP 상태 504에 해당합니다. GatewayTimeout은 다른 프록시 서버 또는 원본 서버의 응답을 기다리는 동안 중간 프록시 서버의 시간이 초과된 경우에 표시됩니다.";
                break;
            case HttpStatusCode.HttpVersionNotSupported:
                responseMessage = "HTTP 상태 505에 해당합니다. HttpVersionNotSupported는 서버에서 요청된 HTTP 버전을 지원하지 않는 경우에 표시됩니다.";
                break;
            default:
                responseMessage = "Net Framework에 HTTP 상태 코드가 있지 않습니다.";
                break;
        }
    }
    return responseMessage;
}

'C#' 카테고리의 다른 글

[C#] yield return 사용해야 할 때와 동기, 비동기 사용 방법  (0) 2021.08.16
[C#] WinUI3 소개  (0) 2021.08.16
[C#] Webview2 API POST 하기  (0) 2021.07.27
[C#] Webview2 STATUS_INVALID_IMAGE_HASH 오류 해결  (0) 2021.07.26
[C#] IP 변경  (0) 2021.07.25