Вступление
В этой статье мы узнаем, как использовать сервисы REST API с помощью HttpClient. Он используется для аутентификации и авторизации пользователей с LDAP Active Directory
В C # мы можем использовать REST API следующими способами:
- HttpWebRequest или HttpWebResponse
- WebClient
- HttpClient
- RestSharp Classes
Лучший и самый простой способ использовать REST API — использовать класс HttpClient.
Чтобы использовать REST API с использованием HttpClient, мы можем использовать различные методы, такие как:
- ReadAsAsync
- PostAsync
- PutAsync
- GetAsync
- SendAsync
В этой статье я использовал HttpClient для использования сервисов REST API. Чтобы использовать сервисы RESTful, нам сначала нужно сгенерировать токен доступа, предоставив URL-адрес accessToken запрос POST, а также заголовки, такие как API Key, Authorization и Content-Type.
Вам также может понравиться:
Получить много REST: учебники по REST API
Здесь API Key, ClientID и Client Secure, которые будут предоставлены поставщиком услуг. Авторизация содержит Client ID и Client Secure, которые могут быть закодированы с помощью Base64String и переданы в качестве зашифрованного значения с префиксом Basic, а Content-Type должен быть «application / x-www-form-urlencoded».
Например: Авторизация = Базовый AccessToken
В теле мы должны предоставить grant_type как client_credentials и область видимости как public со значением «x-www-form-urlencoded».
Когда мы выполняем запрос POST, предоставляя все необходимые данные, как указано выше, будет сгенерирован токен доступа.
Мы можем использовать POSTMAN для тестирования или генерации токена доступа.
В этой статье я собираюсь использовать два разных метода:
- EmployeeRegisteration
- EmployeeSearch
Чтобы работать с вышеуказанными методами, каждый метод содержит конечную точку URL с запросами GET / PUT / POST / DELETE и т. Д. Из вышеприведенных методов у нас есть два запроса POST: EmployeeRegistate и EmployeeSearch.
Метод EmployeeRegisteration содержит заголовки, такие как Content-type, как application / json, ключ API и авторизация.
Здесь авторизация содержит сгенерированный токен с Bearer в качестве префикса.
Например, Авторизация = Bearer AccessToken
И нам нужно передать тело с данными JSON как необработанные.
При выполнении метода EmployeeRegistate с запросом POST, предоставляя все необходимые данные или параметры, мы получаем ответ JSON с 200 OK, что означает, что он успешен. Если это не удастся, то мы получим разные сообщения, такие как 500 Internal Server Error или 400 Bad Request, и т. Д. Если это успешно, то мы получим ответ JSON с полной информацией.
Для EmployeeSearch заголовки будут одинаковыми, и только тело с данными JSON изменяется в соответствии с требованием.
Ниже приведен код для понимания потребления REST API с использованием HttpClient.
GenerateAccessToken
Ниже приведен код для метода GenerateAccessToken.
C #
xxxxxxxxxx
1
class Program
2
{
3
string clientId = "a1s2d3f4g4h5j6k7l8m9n1b2v3c4";
4
string clientSecret = "z1x2c3v4b4n5m6l1k2j3h4g5f6d7s8";
5
string apikey = "o1i2u3y4t5r6e7w8q9a1s2d3f4g5h6j6k7l8";
6
string createNewUserJson;
7
string searchUserJson;
8
string accessToken;
9
EmployeeRegisterationResponse registerUserResponse = null;
10
EmployeeSearchResponse empSearchResponse = null;
11
GetSecurityQuestionsResponse getSecurityQueResponse = null;
12
GetCountryNamesResponse getCountryResponse = null;
13
static void Main(string[] args)
14
{
15
Program prm = new Program();
16
prm.InvokeMethod();
17
18
}
19
public async void InvokeMethod()
20
{
21
Task<string> getAccessToken = GenerateAccessToken();
22
accessToken = await getAccessToken;
23
24
Task<EmployeeRegisterationResponse> registerResponse = EmployeeRegistration(accessToken);
25
registerUserResponse = await registerResponse;
26
27
Task<EmployeeSearchResponse> employeeSearchResponse = EmployeeSearch(accessToken);
28
empSearchResponse = await employeeSearchResponse;
29
30
Task<GetSecurityQuestionsResponse> getSecurityResponse = GetSecretQuestions(accessToken);
31
getSecurityQueResponse = await getSecurityResponse;
32
33
Task<GetCountryNamesResponse> getCountryNamesResponse = GetCountryNames(accessToken);
34
getCountryResponse = await getCountryNamesResponse;
35
}
36
public async Task<string> GenerateAccessToken()
37
{
38
AccessTokenResponse token = null;
39
40
try
41
{
42
HttpClient client = HeadersForAccessTokenGenerate();
43
string body = "grant_type=client_credentials&scope=public";
44
client.BaseAddress = new Uri(accessTokenURL);
45
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, client.BaseAddress);
46
request.Content = new StringContent(body,
47
Encoding.UTF8,
48
"application/x-www-form-urlencoded");//CONTENT-TYPE header
49
50
List<KeyValuePair<string, string>> postData = new List<KeyValuePair<string, string>>();
51
52
postData.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
53
postData.Add(new KeyValuePair<string, string>("scope", "public"));
54
55
request.Content = new FormUrlEncodedContent(postData);
56
HttpResponseMessage tokenResponse = client.PostAsync(baseUrl, new FormUrlEncodedContent(postData)).Result;
57
58
//var token = tokenResponse.Content.ReadAsStringAsync().Result;
59
token = await tokenResponse.Content.ReadAsAsync<AccessTokenResponse>(new[] { new JsonMediaTypeFormatter() });
60
}
61
62
63
catch (HttpRequestException ex)
64
{
65
throw ex;
66
}
67
return token != null ? token.AccessToken : null;
68
69
}
70
private HttpClient HeadersForAccessTokenGenerate()
71
{
72
HttpClientHandler handler = new HttpClientHandler() { UseDefaultCredentials = false };
73
HttpClient client = new HttpClient(handler);
74
try
75
{
76
client.BaseAddress = new Uri(baseUrl);
77
client.DefaultRequestHeaders.Accept.Clear();
78
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));
79
client.DefaultRequestHeaders.Add("apikey", apikey);
80
client.DefaultRequestHeaders.Add("Authorization", "Basic " + Convert.ToBase64String(
81
System.Text.ASCIIEncoding.ASCII.GetBytes(
82
$"{clientId}:{clientSecret}")));
83
}
84
catch (Exception ex)
85
{
86
throw ex;
87
}
88
return client;
89
}
EmployeeRegistration
Ниже приведен код для метода регистрации сотрудников.
C #
xxxxxxxxxx
1
public async Task<EmployeeRegisterationResponse> EmployeeRegistration(string accessToken)
2
{
3
EmployeeRegisterationResponse employeeRegisterationResponse = null;
4
try
5
{
6
string createEndPointURL = "https://www.c-sharpcorner/registerUsers";
7
string username = "KhajaMoiz", password = "Password", firstname = "Khaja", lastname = "Moizuddin", email = "Khaja.Moizuddin@gmail.com";
8
HttpClient client = Method_Headers(accessToken, createEndPointURL);
9
string registerUserJson = RegisterUserJson(username, password, firstname, lastname, email);
10
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, Uri.EscapeUriString(client.BaseAddress.ToString()));
11
request.Content = new StringContent(registerUserJson, Encoding.UTF8, "application/json");
12
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
13
HttpResponseMessage tokenResponse = client.PostAsync(Uri.EscapeUriString(client.BaseAddress.ToString()), request.Content).Result;
14
if (tokenResponse.IsSuccessStatusCode)
15
{
16
employeeRegisterationResponse = await tokenResponse.Content.ReadAsAsync<EmployeeRegisterationResponse>(new[] { new JsonMediaTypeFormatter() });
17
}
18
}
19
catch (HttpRequestException ex)
20
{
21
22
}
23
return employeeRegisterationResponse;
24
}
25
private HttpClient Method_Headers(string accessToken, string endpointURL)
26
{
27
HttpClientHandler handler = new HttpClientHandler() { UseDefaultCredentials = false };
28
HttpClient client = new HttpClient(handler);
29
30
try
31
{
32
client.BaseAddress = new Uri(endpointURL);
33
client.DefaultRequestHeaders.Accept.Clear();
34
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
35
client.DefaultRequestHeaders.Add("apikey", apikey);
36
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
37
}
38
catch (Exception ex)
39
{
40
throw ex;
41
}
42
return client;
43
}
44
private string RegisterUserJson(string userName, string password, string firstName, string lastName, string emailAddress)
45
{
46
registerUserJSON =
47
"{"
48
+ "\"RegisterUserInfo\": {"
49
+ "\"username\": \"" + userName + "\","
50
+ "\"password\": \"" + password + "\","
51
+ "\"firstName\": \"" + firstName + "\","
52
+ "\"lastName\": \"" + lastName + "\","
53
+ "\"emailAddress\": \"" + emailAddress + "\","
54
+ "},"
55
}";
56
57
return registerUserJSON;
58
}
EmployeeSearch
Ниже приведен код для метода EmployeeSearch.
C #
xxxxxxxxxx
1
public async Task<EmployeeSearchResponse> EmployeeSearch(string accessToken)
2
{
3
EmployeeSearchResponse employeeSearchResponse = null;
4
try
5
{
6
string searchUserEndPoint = "https://www.c-sharpcorner.com/Employeesearch";
7
string username = "KMOIZUDDIN", application = "C# CORNER";
8
HttpClient client = Method_Headers(accessToken, searchUserEndPoint);
9
string searchUserJson = SearchUserJson(username, application);
10
//client.BaseAddress = new Uri(searchUserEndPoint);
11
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, Uri.EscapeUriString(client.BaseAddress.ToString()));
12
request.Content = new StringContent(searchUserJson, Encoding.UTF8, "application/json");
13
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
14
HttpResponseMessage tokenResponse = await client.PostAsync(Uri.EscapeUriString(client.BaseAddress.ToString()), request.Content);
15
if (tokenResponse.IsSuccessStatusCode)
16
{
17
employeeSearchResponse = tokenResponse.Content.ReadAsAsync<EmployeeSearchResponse>(new[] { new JsonMediaTypeFormatter() }).Result;
18
}
19
}
20
catch (HttpRequestException ex)
21
{
22
23
}
24
return employeeSearchResponse;
25
}
26
private HttpClient Method_Headers(string accessToken, string endpointURL)
27
{
28
HttpClientHandler handler = new HttpClientHandler() { UseDefaultCredentials = false };
29
HttpClient client = new HttpClient(handler);
30
31
try
32
{
33
client.BaseAddress = new Uri(endpointURL);
34
client.DefaultRequestHeaders.Accept.Clear();
35
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
36
client.DefaultRequestHeaders.Add("apikey", apikey);
37
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
38
}
39
catch (Exception ex)
40
{
41
throw ex;
42
}
43
return client;
44
}
45
private string SearchUserJson(string username, string application)
46
{
47
searchUserJson =
48
"{"
49
+ "\"searchUserFilter\": {"
50
+ "\"username\" : \"" + username + "\","
51
52
+ "},"
53
} ";
54
return searchUserJson;
55
}
Спасибо, и я надеюсь, что это поможет вам!