/// <summary> /// 处理将要向客户端response时 /// </summary> /// <param name="response"></param> /// <param name="cancellationToken"></param> /// <returns></returns> protected override HttpResponseMessage ProcessResponse(HttpResponseMessage response, CancellationToken cancellationToken) { //var isMediaType = response.Content.Headers.ContentType.MediaType.Equals(mediaTypeName, StringComparison.OrdinalIgnoreCase); var ver = System.Web.HttpContext.Current.Request.Headers.GetValues("api_version")?.FirstOrDefault(); var encrypt = MessageEncryptionCreator.GetInstance(ver); if (encrypt != null) { if (response.StatusCode == HttpStatusCode.OK) { var result = response.Content.ReadAsStringAsync().Result; // 返回消息 进行加密 var encodeResult = encrypt.Encode(result); response.Content = new StringContent(encodeResult); } } return(response); }
/// <summary> /// 接收到request时 处理 /// </summary> /// <param name="request"></param> /// <param name="cancellationToken"></param> /// <returns></returns> protected override HttpRequestMessage ProcessRequest(HttpRequestMessage request, CancellationToken cancellationToken) { if (request.Content.IsMimeMultipartContent()) { return(request); } // 获取请求头中 api_version版本号 var ver = System.Web.HttpContext.Current.Request.Headers.GetValues("api_version")?.FirstOrDefault(); // 根据api_version版本号获取加密对象, 如果为null 则不需要加密 var encrypt = MessageEncryptionCreator.GetInstance(ver); if (encrypt != null) { // 读取请求body中的数据 string baseContent = request.Content.ReadAsStringAsync().Result; // 获取加密的信息 // 兼容 body: 加密数据 和 body: code=加密数据 baseContent = baseContent.Match("(code=)*(?<code>[\\S]+)", 2); // URL解码数据 baseContent = baseContent.DecodeUrl(); // 用加密对象解密数据 baseContent = encrypt.Decode(baseContent); string baseQuery = string.Empty; if (!request.RequestUri.Query.IsNullOrEmpty()) { // 同 body // 读取请求 url query数据 baseQuery = request.RequestUri.Query.Substring(1); baseQuery = baseQuery.Match("(code=)*(?<code>[\\S]+)", 2); baseQuery = baseQuery.DecodeUrl(); baseQuery = encrypt.Decode(baseQuery); } // 将解密后的 URL 重置URL请求 request.RequestUri = new Uri($"{request.RequestUri.AbsoluteUri.Split('?')[0]}?{baseQuery}"); // 将解密后的BODY数据 重置 request.Content = new StringContent(baseContent); } return(request); }