C# HTTP 状态代码范围 .NET 3.5

C# HTTP Status Code Ranges .NET 3.5

我正在使用一个分析 API,它以 3 个状态代码响应:

200: Successfully ingested

400: Missing Parameter

50x: Server Error

我想将这些状态封装在一个可读的枚举中,但是处理 50x 需要一系列枚举不支持的值。

对于如何处理这种情况有什么建议吗?

虽然我无法找到直接支持特定枚举值范围的方法,但我确实想出了一个可能的解决方案。

一种扩展方法,可用于解析 500 到 599 之间的所有代码和 return 单个 AllServerErrors 值。

    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using Microsoft.VisualStudio.TestTools.UnitTesting;

    namespace UnitTestProject35
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestSuccessParse()
            {
                HttpResponseCode parsedHttpCode = HttpResponseCode.Unknown;
                parsedHttpCode.TryParse(200, out parsedHttpCode);

                Assert.AreEqual(parsedHttpCode, HttpResponseCode.Success);
            }

            [TestMethod]
            public void TestServerErrorParse()
            {
                HttpResponseCode parsedHttpCode = HttpResponseCode.Unknown;
                parsedHttpCode.TryParse(500, out parsedHttpCode);

                Assert.AreEqual(parsedHttpCode, HttpResponseCode.AllServerErrors);
            }                
        }

        public enum HttpResponseCode
        {
            Unknown = 0,
            Success = 200,
            MissingParameter = 400,
            //etc...

            AllServerErrors = -1,
            InternalServerError = 500,
            NotImplemented = 501,
            BadGateway = 502,
            //etc..        
        }

        public static class EnumExtensions
        {
            public static void TryParse(this HttpResponseCode theEnum, int code, out HttpResponseCode result)
            {
                if (code >= 500 && code <= 599)
                {
                    result = HttpResponseCode.AllServerErrors;                
                }
                else
                {
                    result = (HttpResponseCode)Enum.Parse(typeof(HttpResponseCode), code.ToString());
                }                                        
            }
        }
    }