11using System ;
2+ using System . Net ;
3+ using System . Net . Http ;
24using System . Threading . Tasks ;
35using WebApiClient . Contexts ;
46using 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