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; } })); }
/// <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)); })); }
/// <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))); }
/// <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))); }
/// <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))); }
/// <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))); }