假设我有以下变量:

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
}

所有这些 Select 都不能让我信服,我希望能有一个更好的 Select .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抛出异常.

.net相关问答推荐

使用EFCore.BulkExtensions库方法BulkInertOrUpdate时区分插入和更新的记录

如何使用AWS Lambda函数制作网络挂钩?

如何将 select 语句详细信息提取到不同的方法中仍然保持Eager 加载?

无法通过构建目标访问 dotnet 的环境变量

如何在 .Net Core EF 中组合多个条件表达式来过滤数据?

整个命名空间的SuppressMessage

value 的默认参数必须是编译时间常数?

如何将浮点数向上舍入到 C# 中最近的 int?

托管和非托管代码、内存和大小有什么区别?

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

带有输入字段的消息框

无法加载文件或程序集'System.ComponentModel.Annotations,版本 = 4.1.0.0

WCF服务客户端:内容类型text/html;响应消息的charset=utf-8 与绑定的内容类型不匹配

何时使用抽象类?

如何从 XDocument 获取 Xml 作为字符串?

为什么 C# 不推断我的泛型类型?

用 double 替换 int 时的 Visual Studio 长编译

从流中获取 TextReader?

找不到 System.Windows.Media 命名空间?

绑定在代码隐藏中定义的对象