【问题标题】:How to get the response from api call and use that same response in other endpoints in .netcore?如何从 api 调用获取响应并在 .netcore 的其他端点中使用相同的响应?
【发布时间】:2019-11-04 00:44:27
【问题描述】:

我是 .netcore 的新手,我正在研究在 docker 容器上运行的 web api,并且在使用 postman 时,web api 的工作非常好,可以输出结果。我想在 .netcore 中创建一个程序,调用 webapi 端点并获取响应并在其他端点中使用 MVC 中的特定响应。

解释如下。 admin 的默认用户名和密码是默认设置的,例如 username:admin , password: helloworld . admin 首次登录 api 需要一个新的个人密码,如下图 Postman 所示。

登录接口为:localhost://..../v1/users/login

第一个问题是如何使用 .netcore 在 Authorization->BasicAuth 中给出值。 api 的主体如下图所示。

设置 new_password 后,api 的响应是一个令牌,如下所示。

然后在环境中使用特定令牌来创建用户。下面给出了更清晰问题的图像。

最后,令牌随后用于进行其他 API 调用,例如创建用户。 API: https://localhost/..../v1/users 图片如下。

作为 .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; }
    }

谢谢。

【问题讨论】:

    标签: rest .net-core


    【解决方案1】:

    您的问题似乎是关于如何在 dotnet 核心中执行 API 请求。您正在寻找的课程称为HttpClient,在 dotnet 核心中,它在如何创建课程方面发生了一些变化。我建议您查看这些文档以了解如何创建一个和一些围绕它的学习: ASPNET CORE 2.2 HttpRequests

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

    【讨论】:

    • 感谢@JonE 的回答。我用我正在尝试的代码编辑我的问题。可以查一下吗?
    • 您尝试访问的 URL 是否在同一台服务器上?如果是这样,您不想使用 HttpClient 并且希望使用:``` return RedirectToAction("SomeController", "OtherLoginAction", new LoginAdmin() { .. } ); ```
    • 没有来自 IISExpress 服务器的 url 与我尝试访问的不同。 localhost:9090 在 docker 容器中运行,.netcore 应用在本地机器服务器上运行。
    • 我不会使用那些 FormEncoded 的东西,因为那已经很老了而且没必要看看我发布的答案(第二个链接)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2022-07-26
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多