假设我有以下变量:

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相关问答推荐

从窗体中移除另一个控件中引用的控件时获取设计时通知

PowerShell - 如果用户输入凭据,则查询 AD 时出错

仅在有换行符时捕获分隔符之间的所有文本

如何知道变量是否只是指向另一个对象的pointer或者它是否可以独立存在

如何在 ASP.NET Core MVC 中读取操作方法的属性?

使用 Thread.Abort() 有什么问题

是否可以像 WebView 一样在 Windows 窗体中嵌入 Gecko 或 Webkit?

Style 和 ControlTemplate 的区别

我什么时候应该在 C# 中使用使用块?

在 Moq Callback() 调用中设置变量值

运算符重载 ==, !=, Equals

什么版本的 .NET 附带什么版本的 Windows?

向 .NET 应用程序添加脚本功能

Dapper 是否支持 SQL 2008 表值参数?

何时使用抽象类?

监听依赖属性的变化

哪个密码字符在 winforms 文本框中显示黑点 (•)?

如何使用 EPPlus 设置 XLSX 单元格宽度?

如何访问 Session 变量并在 javascript 中设置它们?

名称 <...> 不存在于命名空间 clr-namespace <...>