Как получить ответ от вызова API и использовать этот же ответ в других конечных точках в .netcore? - PullRequest
0 голосов
/ 21 июня 2019

Я новичок в .netcore, я работаю над веб-API, работающими в Docker-контейнере, и, используя почтальон, веб-API работают очень хорошо, выводя результаты.Я хочу создать в .netcore программу, вызывающую конечные точки webapi и получающую ответ и использующую этот конкретный ответ в других конечных точках с MVC.

Объяснение приведено ниже.Имя пользователя и пароль по умолчанию для администратора заданы по умолчанию, например username:admin , password: helloworld.При первом входе администратора в API требуется новый персональный пароль, как показано на рисунке ниже.

API входа: localhost://..../v1/users/login Login Admin

Первый вопрос: как передать значения в Authorization-> BasicAuth, используя .netcore.Тело API выглядит как на рисунке ниже.Setting new_password for Admin

После установки new_password ответом API является токен, как показано ниже.Token Generated

Затем в среде используется конкретный токен для создания пользователя.Изображение для более ясной проблемы приведено ниже.Token Save

Наконец, токен затем используется для выполнения других вызовов API, таких как создание пользователя. API: https://localhost/..../v1/users Изображение ниже.Creating a User

Будучи новичком в языке .netcore, я действительно изо всех сил пытаюсь делать такого рода вызовы API, так как большинство обучающих программ, которые я пробовал, генерируют свой собственный токен из API,но здесь я просто хочу взять токен ответа и сохранить его, а затем использовать его в других вызовах API.Поддержка сообщества StackOverflow всегда была очень полезна для меня.

Код, который я пробую, приведен ниже.

**Controller**

 public class Login_AdminController : ControllerBase
    {
        [Route("/loginAdmin")]
        [HttpPost]
        public async Task<string> LoginAdminAsync([FromBody] dynamic content)
        {
            LoginAdmin L = new LoginAdmin();
            var client = new HttpClient();
            client.BaseAddress = new Uri("https://localhost:9090");
            var request = new HttpRequestMessage(HttpMethod.Post, "/v1/users/login");
            var byteArray = new UTF8Encoding().GetBytes($"<{L.username}:{L.df_Password}>");
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

            var formData = new List<KeyValuePair<string, string>>();
            formData.Add(new KeyValuePair<string, string>("new_password", "helloWorld123!"));

            request.Content = new FormUrlEncodedContent(formData);
            var response = await client.SendAsync(request);
            Console.WriteLine(response);
            return content;
        }
   }
}
***Model***
    public class LoginAdmin
    {
        public string username = "admin";
        public string df_Password = "secret";
        public string new_Password { get; set; }
    }

Спасибо.

1 Ответ

1 голос
/ 21 июня 2019

Похоже, ваш вопрос заключается в том, как выполнять запросы API в ядре dotnet. Класс, который вы ищете, называется HttpClient, и в ядре dotnet он претерпел некоторые изменения в том, как вы можете его создать. Я бы порекомендовал вам проверить эти документы, чтобы узнать, как их создать, и немного узнать об этом: ASPNET CORE 2.2 HttpRequests

Наконец, я бы порекомендовал этот вопрос для примера публикации JSON через клиент, который вы создаете: ПУБЛИКАЦИЯ JsonObject с HttpClient From Web API , Стоит отметить, что существуют методы расширения для передачи объектов вместо строкового содержимого, и в первом документе вы можете увидеть примеры добавления заголовков (например, Authorization)

...