马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
HttpClientHelper.cs- using System.IO;
- using System.Net;
- using System.Net.Http;
- using System.Text;
- using Cortland.Shared.Constants;
- using System.Net.Http.Headers;
- using Newtonsoft.Json;
- using System.Configuration;
- public partial class HttpClientHelper
- {
- #region HTTP POST & GET methods to call APIs in EvanTest
- /// <summary>
- /// Http Post
- /// </summary>
- /// <param name="apiUrl">/api/Requests/SignOff</param>
- /// <param name="postBodyDataJson"></param>
- /// <returns></returns>
- public static string HttpPostWithCookie(string apiUrl, string postBodyDataJson)
- {
- return HttpCallWithCookie(apiUrl, methond: "POST", postBodyDataJson: postBodyDataJson);
- }
- /// <summary>
- /// Http Get
- /// </summary>
- /// <param name="apiUrl"></param>
- /// <returns></returns>
- public static string HttpGetWithCookie(string apiUrl)
- {
- return HttpCallWithCookie(apiUrl, methond: "GET");
- }
- #endregion
- #region Private Functions
- /// <summary>
- /// Http Method to call from EvanTest with Cookies
- /// </summary>
- /// <param name="apiUrl"></param>
- /// <param name="methond">GET OR POST</param>
- /// <param name="postBodyDataJson">Body data,need to convert into Json</param>
- /// <param name="isRelogin"></param>
- /// <param name="contectType">default is "application/json"</param>
- /// <returns></returns>
- private static string HttpCallWithCookie(string apiUrl, string methond = "GET", string postBodyDataJson
- = "", bool isRelogin = true, string contectType = "application/json")
- {
- try
- {
- string baseUrl = GetBaseUrl();
- string url = baseUrl + "/" + apiUrl.TrimStart('/');
- //url = "http://localhost:6634/api/Requests/GetRequestStepsByRequestId?requestId=650";
- HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
- request.Method = methond;
- request.ContentType = contectType;
- request.Accept = contectType;
- #region Check If contained Cookie, if not, will login to EvanTest to get Cookies
- if (string.IsNullOrEmpty(AppConstants.JWTToken) && isRelogin)
- {
- //check if Cookie is expired. If expired, then login again
- GetAgencyCorProToken(AppConstants.Relogin_CurrentUserName, AppConstants.Relogin_UserPwd, AppConstants.AgencyCorProCrmUserId);
- return HttpCallWithCookie(apiUrl, methond, postBodyDataJson, isRelogin: false, contectType);
- }
- #endregion
- request.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + AppConstants.JWTToken);
- //Post with Body Json Data
- if (!string.IsNullOrEmpty(postBodyDataJson))
- {
- request.ContentLength = postBodyDataJson.Length;
- StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII);
- writer.Write(postBodyDataJson);
- writer.Flush();
- }
- HttpWebResponse response = (HttpWebResponse)request.GetResponse();
- if (response.StatusCode == HttpStatusCode.OK)
- {
- string encoding = response.ContentEncoding;
- if (encoding == null || encoding.Length < 1)
- {
- encoding = "UTF-8";
- }
- //AppConstants.CookieValue = GetCookie(response);
- StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(encoding));
- string retString = reader.ReadToEnd();
- bool isCookieExpired = IsCookieExpired(retString);
- if (isRelogin && isCookieExpired)//This means token expired, will relogin and call API again
- {
- //check if Cookie is expired. If expired, then login again
- GetAgencyCorProToken(AppConstants.Relogin_CurrentUserName, AppConstants.Relogin_UserPwd, AppConstants.AgencyCorProCrmUserId);
- if (!string.IsNullOrEmpty(AppConstants.JWTToken))
- {
- return HttpCallWithCookie(apiUrl, methond, postBodyDataJson, isRelogin: false, contectType);
- }
- }
- return retString;
- }
- else if (isRelogin)
- {
- //check if Cookie is expired. If expired, then login again
- GetAgencyCorProToken(AppConstants.Relogin_CurrentUserName, AppConstants.Relogin_UserPwd, AppConstants.AgencyCorProCrmUserId);
- if (!string.IsNullOrEmpty(AppConstants.JWTToken))
- {
- return HttpCallWithCookie(apiUrl, methond, postBodyDataJson, isRelogin: false, contectType);
- }
- }
- return null;
- }
- catch (Exception ex)
- {
- throw new Exception($"(EvanTest) Call API {apiUrl} failed. " + ex.Message);
- }
- }
- /// <summary>
- /// Check Cookie if expired.
- /// If return HTML that means expired
- /// </summary>
- /// <param name="retString"></param>
- /// <returns></returns>
- private static bool IsCookieExpired(string retString)
- {
- return retString != null && retString.Contains("<!DOCTYPE html>");
- }
- private static string GetCookieForHttpHeader(HttpResponseMessage message)
- {
- string cookieString = string.Empty;
- message.Headers.TryGetValues("Set-Cookie", out var setCookie);
- if (setCookie != null)
- {
- cookieString = string.Join(";", setCookie);
- }
- return cookieString;
- }
- #endregion
- private static HttpClientHandler GenerateHttpClientHandler(string apiUrl)
- {
- // HttpClientHandler
- // helpLink https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclienthandler?view=netframework-4.8
- var httpclientHandler = new HttpClientHandler();
- // Skip https certificate validation
- if (apiUrl.StartsWith("https"))
- {
- httpclientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, error) => true;
- }
- return httpclientHandler;
- }
- private static string GetBaseUrl()
- {
- string? baseUrl = ConfigurationManager.AppSettings["AgencyCorproUrl"];
- if (baseUrl != null)
- {
- return baseUrl.TrimEnd('/');
- }
- return string.Empty;
- }
- public static string GetAgencyCorProToken(string userName, string password, int crmUserId)
- {
- string tokenValue = "";
- try
- {
- string baseUrl = GetBaseUrl();
- if (!string.IsNullOrEmpty(baseUrl))
- {
- string authenticateUrl = CorProAPI.AUTHENTICATE_TOKEN_URL;
- LoginModelParameter loginModel = GetParameter(userName, password, crmUserId);
- HttpClient httpClient = new HttpClient();
- HttpResponseMessage httpResponseMessage = httpClient.PostAsJsonAsync(baseUrl + authenticateUrl, loginModel).Result;
- if (httpResponseMessage.StatusCode == HttpStatusCode.OK)
- {
- UserAccessTokenDto userAccessToken = httpResponseMessage.Content.ReadAsAsync<UserAccessTokenDto>().Result;
- if (userAccessToken != null)
- {
- tokenValue = userAccessToken.Token;
- AppConstants.JWTToken = tokenValue;
- }
- }
- httpClient.Dispose();
- }
- }
- catch (Exception ex)
- {
- throw;
- }
- return tokenValue;
- }
- public static void DownloadDocument(int documentId, string saveFileName, bool isDownloadDocument = true)
- {
- try
- {
- string baseUrl = GetBaseUrl();
- if (!string.IsNullOrEmpty(baseUrl))
- {
- DownloadParameter downloadParameter = new DownloadParameter();
- downloadParameter.Token = AppConstants.JWTToken;
- downloadParameter.DocumentId = documentId;
- string apiUrl = $"{baseUrl}{CorProAPI.DOWNLOAD_BORROWING_REQUEST_DOCUMENT_URL}";
- var httpclientHandler = GenerateHttpClientHandler(apiUrl);
- using (var httpClient = new HttpClient(httpclientHandler))
- {
- // Bearer
- httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AppConstants.JWTToken);
- HttpResponseMessage httpResponseMessage = httpClient.PostAsJsonAsync(apiUrl, downloadParameter).Result;
- if (httpResponseMessage.StatusCode == HttpStatusCode.OK)
- {
- Stream stream = httpResponseMessage.Content.ReadAsStreamAsync().Result;
- using (var filestream = new FileStream(saveFileName, FileMode.Create, FileAccess.Write))
- {
- stream.CopyTo(filestream);
- }
- stream.Close();
- }
- httpClient.Dispose();
- }
- }
- }
- catch (Exception ex)
- {
- throw new Exception($"(CorPro Agency) Call API {CorProAPI.DOWNLOAD_BORROWING_REQUEST_DOCUMENT_URL} failed. " + ex.Message);
- }
- }
- /// <summary>
- /// upload docuemnt
- /// </summary>
- /// <param name="UploadDocumentDto"></param>
- /// <returns></returns>
- /// <exception cref="Exception"></exception>
- public static UploadDocumentDto InsertOrUpdateDocument(UploadDocumentDto UploadDocumentDto)
- {
- try
- {
- UploadDocumentDto borrowingRequestCommentDtoNew = UploadDocumentDto;
- string baseUrl = GetBaseUrl();
- if (!string.IsNullOrEmpty(baseUrl))
- {
- string apiUrl = $"{baseUrl}{CorProAPI.INSERT_UPDATE_BORROWING_REQUEST_DOCUMENT}";
- var httpclientHandler = GenerateHttpClientHandler(apiUrl);
- HttpClient httpClient = new HttpClient(httpclientHandler);
- httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", AppConstants.JWTToken);
- HttpResponseMessage httpResponseMessage = httpClient.PostAsJsonAsync(apiUrl, UploadDocumentDto).Result;
- if (httpResponseMessage.StatusCode == HttpStatusCode.OK)
- {
- borrowingRequestCommentDtoNew = httpResponseMessage.Content.ReadAsAsync<UploadDocumentDto>().Result;
- }
- httpClient.Dispose();
- }
- return borrowingRequestCommentDtoNew;
- }
- catch (Exception ex)
- {
- throw new Exception($"(CorPro Agency) Call API {CorProAPI.INSERT_UPDATE_BORROWING_REQUEST_DOCUMENT} failed. " + ex.Message);
- }
- }
- }
- public class LoginModelParameter
- {
- public string Token { get; set; }
- }
- public class DownloadParameter : LoginModelParameter
- {
- public int DocumentId { get; set; }
- }
- public class UploadDocumentDto
- {
- public int Id { get; set; }
- public int BorrowingRequestId { get; set; }
- public string FileName { get; set; }
- public string UploadFilePath { get; set; }
- /// <summary>
- /// Save file to webservice use (Docs/1d848a6e493b46c191180fe171b2492f.pdf)
- /// </summary>
- public string ServerUploadFilePath { get; set; }
- /// <summary>
- /// Save file to webservice use (1d848a6e493b46c191180fe171b2492f.pdf)
- /// </summary>
- public string ServerUploadFileName { get; set; }
- /// <summary>
- /// CRMUserId, query data from ApplicationUsers or MCP2 table
- /// </summary>
- public int CreatorUserId { get; set; }
- /// <summary>
- /// UTC time
- /// </summary>
- public DateTime CreationTime { get; set; }
- public string Comment { get; set; }
- public decimal? FileSize { get; set; }
- public string FileSizeUnit { get; set; }
- /// <summary>
- /// Not Yet
- /// </summary>
- public string CreatorUserName { get; set; }
- public byte[] UploadFiles { get; set; }
- public string UserTokenValue { get; set; }
- public string NewFileName { get; set; }
- public string SelectedFileName { get; set; }
- public string ShowFileNameAndFileSize
- {
- get
- {
- string newFileName = "";
- if (!string.IsNullOrEmpty(FileName))
- {
- newFileName = FileName;
- if (FileSize.HasValue && FileSize.Value > 0 && !string.IsNullOrEmpty(FileSizeUnit))
- {
- newFileName += " " + FileSize.Value.ToString("0.00") + FileSizeUnit;
- }
- }
- return newFileName;
- }
- }
- public ActivityRequestEnumType? RequestType { get; set; }
- public int? CreateBorrowingRequestUserId { get; set; }
- }
复制代码 Upload file- private void AddCommentBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
- {
- BorrowingRequestDocumentDto borrowingRequestDocumentDto = e.Argument as BorrowingRequestDocumentDto;
- if (!string.IsNullOrEmpty(borrowingRequestDocumentDto.SelectedFileName))
- {
- IsDownloading = true;
- System.IO.FileInfo fileInfo = new System.IO.FileInfo(borrowingRequestDocumentDto.SelectedFileName);
- borrowingRequestDocumentDto.FileName = fileInfo.Name;
- borrowingRequestDocumentDto.NewFileName = Guid.NewGuid().ToString() + fileInfo.Extension;
- borrowingRequestDocumentDto.UploadFiles = FileUtil.ConvertFileToBytes(borrowingRequestDocumentDto.SelectedFileName);
- }
- if (borrowingRequestDocumentDto != null)
- {
- e.Result = HttpClientHelper.InsertOrUpdateDocument(borrowingRequestDocumentDto);
- }
- }
复制代码 |