c# - 检查 HttpStatusCode 是否表示成功或失败

标签 c# .net system.net

假设我有以下变量:

System.Net.HttpStatusCode status = System.Net.HttpStatusCode.OK;

如何检查这是成功状态码还是失败状态码?

例如,我可以执行以下操作:

int code = (int)status;
if(code >= 200 && code < 300) {
    //Success
}

我也可以有某种白名单:

HttpStatusCode[] successStatus = new HttpStatusCode[] {
     HttpStatusCode.OK,
     HttpStatusCode.Created,
     HttpStatusCode.Accepted,
     HttpStatusCode.NonAuthoritativeInformation,
     HttpStatusCode.NoContent,
     HttpStatusCode.ResetContent,
     HttpStatusCode.PartialContent
};
if(successStatus.Contains(status)) //LINQ
{
    //Success
}

这些替代方案都无法说服我,我希望有一个 .NET 类或方法可以为我完成这项工作,例如:

bool isSuccess = HttpUtilities.IsSuccess(status);

最佳答案

如果您使用的是 HttpClient 类,那么您将获得 HttpResponseMessage回来。

此类有一个名为 IsSuccessStatusCode 的有用属性,它将为您进行检查。

using (var client = new HttpClient())
{
    var response = await client.PostAsync(uri, content);
    if (response.IsSuccessStatusCode)
    {
        //...
    }
}

如果您好奇的话,这个属性是 implemented作为:

public bool IsSuccessStatusCode
{
    get { return ((int)statusCode >= 200) && ((int)statusCode <= 299); }
}

因此,如果您直接使用 HttpClient,则可以重用该算法。

如果响应不成功,您还可以使用 EnsureSuccessStatusCode 抛出异常。

关于c# - 检查 HttpStatusCode 是否表示成功或失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32569860/

相关文章:

.net - ADO.NET 与 WCF

asp.net - 如何在 Visual Studio 2015 中创建 ASP.NET 服务器控件项目?

mysql - 如何在 mysql 中以 12 小时格式存储时间

c# - .NET:WebBrowser、WebClient、WebRequest、HTTPWebRequest……啊!

c# - System.Net.WebClient 异常失败

asynchronous - 无法编译 - Request.Content.IsMimeMultipartContent() 未找到

c# - 在刻度线中间停止计时器

c# - 在 C# 中使用 LINQ 比较和合并字典

c# - 获取请求的 SSL 证书

c# - 错误 :Index (zero based) must be greater than or equal to zero and less than the size of the argument list