EI-Image-Viewer-Api/EI_TestProject/RestHelper.cs

111 lines
3.5 KiB
C#

using Azure.Core;
using IRaCIS.Core.Infrastructure.Extention;
using IRaCIS.Core.Infrastructure;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using RestSharp;
using System.Net;
using IRaCIS.Application.Contracts;
namespace EI_TestProject
{
public static class RestHelper
{
private static RestClient _client { get; set; }
private static string _token { get; set; }
public static RestClient InitRestHelper(string baseUrl, string userName, string md5Pwd)
{
_client = new RestClient(baseUrl);
_client.AddDefaultHeader("Content-Type", "application/json");
var result = (LoginAndGetAccessTokenAsync<ResponseOutput<LoginReturnDTO>>(userName, md5Pwd)).Result;
_token = result.Data.JWTStr;
return _client;
}
/// <summary>
/// µÇ¼»ñÈ¡Token
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="userName"></param>
/// <param name="md5Pwd"></param>
/// <returns></returns>
private static async Task<T> LoginAndGetAccessTokenAsync<T>(string userName, string md5Pwd)
{
var jsonBody = new JObject {
{ "UserName", userName.Trim() },
{ "Password", md5Pwd }
};
var result = await Post_JsonBodyRequestAsync<T>("/user/login", jsonBody, false);
return result;
}
/// <summary>
/// json Post ÇëÇó ·â×°
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url"></param>
/// <param name="jsonBody"></param>
/// <param name="isAddToken"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static async Task<T> Post_JsonBodyRequestAsync<T>(string url, JObject jsonBody, bool isAddToken = true)
{
var request = new RestRequest(url, Method.Post);
if (isAddToken)
{
var accessToken = _token;
request.AddHeader("Authorization", "Bearer " + accessToken);
}
request.AddParameter("application/json", jsonBody.ToString(), ParameterType.RequestBody);
var response = await _client.ExecuteAsync(request);
if (response.StatusCode == HttpStatusCode.OK)
{
return JsonConvert.DeserializeObject<T>(response.Content);
}
else
{
throw new Exception($"Error {response.StatusCode}: {response.StatusDescription}. {response.Content}");
}
}
/// <summary>
/// URL Delete ÇëÇó·â×°
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="url"></param>
/// <returns></returns>
/// <exception cref="Exception"></exception>
public static async Task<T> DeleteRequestAsync<T>(string url)
{
var request = new RestRequest(url, Method.Delete);
var accessToken = _token;
request.AddHeader("Authorization", "Bearer " + accessToken);
var response = await _client.ExecuteAsync(request);
if (response.StatusCode == HttpStatusCode.OK)
{
return JsonConvert.DeserializeObject<T>(response.Content);
}
else
{
throw new Exception($"Error {response.StatusCode}: {response.StatusDescription}. {response.Content}");
}
}
}
}