public static IHttpClientBuilder UseKeyedQuerySignatureInterceptor(this IHttpClientBuilder httpClientBuilder, IAccessKeyStorage accessKeyStorage, string algorithmName = "HMACSHA1")
 {
     return(httpClientBuilder.AddRequestInterceptor(request =>
     {
         request.RequestUri = UriHelper.GetRelativeUri(request.RequestUri, string.Empty, (builder) =>
         {
             builder.Query = QuerySignatureHelper.GetKeyedSignedQueryString(builder.Uri, accessKeyStorage, algorithmName);
         });
     }));
 }
 public static IHttpClientBuilder UseSimpleQuerySignatureInterceptor(this IHttpClientBuilder httpClientBuilder, string algorithmName = "SHA1")
 {
     return(httpClientBuilder.AddRequestInterceptor(request =>
     {
         request.RequestUri = UriHelper.GetRelativeUri(request.RequestUri, string.Empty, (builder) =>
         {
             builder.Query = QuerySignatureHelper.GetSimpleSignedQueryString(builder.Uri, algorithmName);
         });
     }));
 }
 /// <summary>
 /// 使用请求拦截器,将每个请求自动从 HTTP 替换成 HTTPS 协议。
 /// </summary>
 /// <param name="httpClientBuilder"></param>
 /// <returns></returns>
 public static IHttpClientBuilder UseHttpsForcedInterceptor(this IHttpClientBuilder httpClientBuilder)
 {
     return(httpClientBuilder.AddRequestInterceptor(request =>
     {
         if (Uri.UriSchemeHttp.Equals(request.RequestUri?.Scheme, StringComparison.InvariantCultureIgnoreCase))
         {
             UriBuilder builder = new UriBuilder(request.RequestUri);
             builder.Scheme = Uri.UriSchemeHttps;
             request.RequestUri = builder.Uri;
         }
     }));
 }
示例#4
0
 /// <summary>
 /// 使用请求拦截器,为每个请求自动添加 Host 标头。
 /// </summary>
 /// <param name="httpClientBuilder"></param>
 /// <param name="host">Host 值。</param>
 /// <returns></returns>
 public static IHttpClientBuilder UseHostInterceptor(this IHttpClientBuilder httpClientBuilder, string host)
 {
     return(httpClientBuilder.AddRequestInterceptor(request =>
     {
         if (string.IsNullOrEmpty(host))
         {
             request.Headers.Remove("Host");
         }
         else
         {
             request.AddHeader("Host", host);
         }
     }));
 }
        /// <summary>
        /// 使用请求拦截器,为每个请求自动添加基于 https://tools.ietf.org/html/draft-cavage-http-signatures 的签名。
        /// </summary>
        /// <param name="httpClientBuilder"></param>
        /// <param name="signatureGenerator"></param>
        /// <param name="parameterGenerator"></param>
        /// <returns></returns>
        public static IHttpClientBuilder UseHttpSignatureInterceptor(this IHttpClientBuilder httpClientBuilder, ISignatureGenerator signatureGenerator, Func <IHttpRequest, ISigningParameter> parameterGenerator)
        {
            if (signatureGenerator == null)
            {
                throw new ArgumentNullException(nameof(signatureGenerator));
            }
            if (parameterGenerator == null)
            {
                throw new ArgumentNullException(nameof(parameterGenerator));
            }

            return(httpClientBuilder.AddRequestInterceptor(request =>
            {
                ISigningParameter signingParameter = parameterGenerator.Invoke(request);
                ISignature signature = signatureGenerator.Sign(request.ToSigningRequest(), signingParameter);
                request.AddHeader("Signature", signature.ToString(SignatureFormatting.Signature));
                request.AddHeader("Authorization", signature.ToString(SignatureFormatting.Authorization));
            }));
        }
示例#6
0
 /// <summary>
 /// 使用请求拦截器,为每个请求自动添加 HTTP Bearer Token 认证信息。
 /// </summary>
 /// <param name="httpClientBuilder"></param>
 /// <param name="authToken"></param>
 /// <returns></returns>
 public static IHttpClientBuilder UseBearerAuthorizationInterceptor(this IHttpClientBuilder httpClientBuilder, string authToken)
 {
     return(httpClientBuilder.AddRequestInterceptor(header => header.AddHeader("Authorization", "Bearer " + authToken)));
 }
示例#7
0
        /// <summary>
        /// 使用请求拦截器,为每个请求自动添加 HTTP 基本认证信息。
        /// </summary>
        /// <param name="httpClientBuilder"></param>
        /// <param name="username">用户名。</param>
        /// <param name="password">密码。</param>
        /// <returns></returns>
        public static IHttpClientBuilder UseBasicAuthorizationInterceptor(this IHttpClientBuilder httpClientBuilder, string username, string password)
        {
            string auth = Base64Util.Encode($"{username}:{password}");

            return(httpClientBuilder.AddRequestInterceptor(header => header.AddHeader("Authorization", $"Basic {auth}")));
        }
 /// <summary>
 /// 使用请求拦截器,为每个请求自动添加 Referrer 标头。
 /// </summary>
 /// <param name="httpClientBuilder"></param>
 /// <param name="referrer">Referrer 值。</param>
 /// <returns></returns>
 public static IHttpClientBuilder UseReferrerInterceptor(this IHttpClientBuilder httpClientBuilder, string referrer)
 {
     return(httpClientBuilder.AddRequestInterceptor(request => request.AddHeader("Referer", referrer)));
 }
示例#9
0
 /// <summary>
 /// 使用请求拦截器,为每个请求自动添加 Connection 标头。
 /// </summary>
 /// <param name="httpClientBuilder"></param>
 /// <param name="closed">是否保持连接(默认值 true)。</param>
 /// <returns></returns>
 public static IHttpClientBuilder UseKeepAliveInterceptor(this IHttpClientBuilder httpClientBuilder, bool closed = true)
 {
     return(httpClientBuilder.AddRequestInterceptor(request => request.AddHeader("Connection", closed ? "Close" : "Keep-Alive")));
 }
 /// <summary>
 /// 使用请求拦截器,为每个请求自动添加跟踪标识。
 /// </summary>
 /// <param name="httpClientBuilder"></param>
 /// <param name="requestId">跟踪标识。</param>
 /// <returns></returns>
 public static IHttpClientBuilder UseRequestIdInterceptor(this IHttpClientBuilder httpClientBuilder, string requestId)
 {
     return(httpClientBuilder.AddRequestInterceptor(request => request.AddHeader("X-Request-Id", requestId)));
 }
 /// <summary>
 /// 使用请求拦截器,为每个请求自动添加 User-Agent 标头。
 /// </summary>
 /// <param name="httpClientBuilder"></param>
 /// <param name="userAgent">User-Agent 值。</param>
 /// <returns></returns>
 public static IHttpClientBuilder UseUserAgentInterceptor(this IHttpClientBuilder httpClientBuilder, string userAgent)
 {
     return(httpClientBuilder.AddRequestInterceptor(request => request.AddHeader("User-Agent", userAgent)));
 }
示例#12
0
        /// <summary>
        /// 使用请求拦截器,为每个请求自动添加时间戳。
        /// </summary>
        /// <param name="httpClientBuilder"></param>
        /// <returns></returns>
        public static IHttpClientBuilder UseTimestampInterceptor(this IHttpClientBuilder httpClientBuilder)
        {
            long ts = DateTimeOffset.Now.ToUnixTimeSeconds();

            return(httpClientBuilder.AddRequestInterceptor(request => request.AddQueryString("timestamp", ts)));
        }