Пример #1
0
        /// <summary>
        /// 获取用户自定义RequestExceptionHandler
        /// 如果有自定义RequestExceptionHandler,将不会执行<see cref="RequestExceptionHandler"/>
        /// </summary>
        protected async Task ExceRequestExceptionHandler(int limitTimes, HttpRequestException e, HttpRequestMessage request)
        {
            //没有自定义将执行默认
            var exHandler = RequestExceptionHandler;

            //获取自定义规则
            if (request.Properties.TryGetValue(HttpRequestMessageExtensions.Keys.RequestExceptionHandler, out var userDefindHandler))
            {
                exHandler = (Func <HttpRequestException, Task>)userDefindHandler;
            }

            StringBuilder builder = new StringBuilder();

            builder.Append($"Url:{request.RequestUri}   ");
            builder.Append($"Method:{request.Method.ToString()}   ");
            builder.Append(request.Method == HttpMethod.Post ? $"Param:{await request.Content.ReadAsStringAsync()}   " : string.Empty);

            //没有默认将直接抛出
            if (exHandler == null)
            {
                Logger.Log($"HTTP请求失败{++limitTimes}次。原因:{e.GetFullMessage()} {builder.ToString()}。备注:取消执行RequestExceptionHandler");
                throw e;
            }

            Logger.Log($"HTTP请求失败{++limitTimes}次。原因:{e.GetFullMessage()} {builder.ToString()}");
            await exHandler(e).ConfigureAwait(false);
        }