如何从api调用获取响应并在.netcore中的其他端点中使用相同的响应?

时间:2019-06-21 07:29:00

标签: rest .net-core

.netcore是我的新手,我正在在docker容器上运行的Web api上工作,而在使用邮递员的同时,Web api可以很好地输出结果。我想在.netcore中制作一个程序,以调用webapi端点并获取响应,并在具有MVC的其他端点中使用该特定响应。

下面给出解释。 管理员的默认用户名和密码是默认设置,例如username:admin , password: helloworld 。管理员首次登录该api时需要一个新的个人密码,如下图的邮递员图所示。

登录api是:localhost://..../v1/users/login Login Admin

第一个问题是如何使用.netcore在Authorization-> BasicAuth中提供值。 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 个答案:

答案 0 :(得分:1)

您的问题似乎是关于如何在dotnet核心中执行API请求。您要查找的类称为HttpClient,在dotnet核心中,它对创建类的方式进行了一些更改。我建议您检查这些文档,以了解如何创建一个文档以及有关它的一些知识: ASPNET CORE 2.2 HttpRequests

最后,我将向您推荐这个问题,作为通过您创建的客户端发布JSON的示例:POSTing JsonObject With HttpClient From Web API 。值得注意的是,有一些扩展方法可以传递对象而不是字符串内容,并且在第一个文档中,您可以看到添加标头的示例(例如Authorization