Skip to content

Commit 5e01c24

Browse files
committed
增加IsSuccessStatusCode方法
1 parent 369778f commit 5e01c24

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

WebApiClient/Attributes/ReturnAttributes/ApiReturnAttribute.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using System.Net;
3+
using System.Net.Http;
24
using System.Threading.Tasks;
35
using WebApiClient.Contexts;
46
using WebApiClient.Interfaces;
@@ -12,7 +14,7 @@ namespace WebApiClient.Attributes
1214
public abstract class ApiReturnAttribute : Attribute, IApiReturnAttribute
1315
{
1416
/// <summary>
15-
/// 获取或设置是否确保回复的http状态码是2xx码
17+
/// 获取或设置是否确保响应的http状态码通过IsSuccessStatusCode验证
1618
/// 当设置为true之后,请求可能会引发HttpFailureStatusException
1719
/// </summary>
1820
public bool EnsureSuccessStatusCode { get; set; }
@@ -27,20 +29,28 @@ Task<object> IApiReturnAttribute.GetTaskResult(ApiActionContext context)
2729
{
2830
if (this.EnsureSuccessStatusCode == true)
2931
{
30-
try
32+
var statusCode = context.ResponseMessage.StatusCode;
33+
if (this.IsSuccessStatusCode(statusCode) == false)
3134
{
32-
context.ResponseMessage.EnsureSuccessStatusCode();
33-
}
34-
catch (Exception ex)
35-
{
36-
var statusCode = context.ResponseMessage.StatusCode;
37-
var inner = ex.InnerException == null ? ex : ex.InnerException;
35+
var inner = new HttpRequestException($"响应的http状态码不成功:{(int)statusCode} {statusCode}");
3836
throw new HttpFailureStatusException(statusCode, context, inner);
3937
}
4038
}
4139
return this.GetTaskResult(context);
4240
}
4341

42+
43+
/// <summary>
44+
/// 指示状态码是否为成功的状态码
45+
/// </summary>
46+
/// <param name="statusCode">状态码</param>
47+
/// <returns></returns>
48+
protected virtual bool IsSuccessStatusCode(HttpStatusCode statusCode)
49+
{
50+
var status = (int)statusCode;
51+
return status >= 200 & status <= 299;
52+
}
53+
4454
/// <summary>
4555
/// 获取异步结果
4656
/// </summary>

0 commit comments

Comments
 (0)