javascript - 如何使用存储在 session 存储中的访问 token 通过 HttpClient 进行 Web api 调用?

标签 javascript c# asp.net-mvc asp.net-web-api session-storage

我已使用 ajax 调用完成登录,并使用以下代码将访问 token 存储在 session 存储中。

        $('#btnLogin').click(function () {
            $.ajax({
                url: 'http://localhost:59983/token',
                method: 'POST',
                contentType: 'application/json',
                data: {
                    username: $('#txtUsername').val(),
                    password: $('#txtPassword').val(),
                    grant_type: 'password'
                },
                success: function (response) {
                    sessionStorage.setItem("accessToken", response.access_token);
                    console.log("Success!!!!");
                    alert("Login Successful");
                },
                error: function (jqXHR) {
                    console.log("Failed!!!!");
                    $('#divErrorText').text(jqXHR.responseText);
                    $('#divError').show('fade');
                }
            });
        });

现在登录后,我想使用存储的访问 token 通过 Controller 方法使用 HttpClient 执行 api 调用。我不知道如何传递存储的访问 token 来进行 api 调用。 我编写了以下代码来使用 HttpClient 进行 api 调用。

 using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:59983/api/flight");
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
            var responseTask = client.GetAsync("flight");
            responseTask.Wait();
            var result = responseTask.Result;
            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsAsync<IList<tblFlight>>();
                readTask.Wait();
                flights = readTask.Result;
            }
            else
            {
                flights = Enumerable.Empty<tblFlight>();
                ModelState.AddModelError(string.Empty, "Server error. Please contact administrator.");
            }
        }

请建议我如何使用存储的访问 token ?

最佳答案

当我们处理网络存储(例如 session 存储或本地存储)时,我们在客户端使用 javascript 、 jquery 等进行处理。这些存储项无法在服务器端代码中访问。它们仅限于您的本地浏览器,可以从浏览器上运行的客户端代码进行访问。 现在,根据您的情况,我认为您可以在服务器端进行 session 。您在本地存储中设置值的点,而不是放在那里,对服务器上的任何 actionresult 函数进行 ajax 调用并在 session 中设置值。稍后在服务器端获取它。同样,如果您想要客户端的值,您需要再次执行 ajax 调用并从 Controller 中的服务器端函数获取它。

关于javascript - 如何使用存储在 session 存储中的访问 token 通过 HttpClient 进行 Web api 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58724681/

相关文章:

javascript动态CSS样式

javascript - 如何从 Node.js 下载 AngularJs Controller 中的 .docx 文件

asp.net-mvc - 如何下载Azure容器目录中的所有文件?

c# - 来自 wag.codeplex.com 的 Tailspin 示例

c# - MVC 3 复选框在模型返回值时失败

javascript - 如何通过减去 2 个要在 timeOut 函数中使用的日期来获得剩余的毫秒数?

javascript - 在javascript中添加一个对象和一个数组的结果是什么?

C# {"ORA-00917: missing comma"} 插入查询错误

c# - 如何将新的 MediaType 添加到 ASP.Net WebApi 使用的 MediaTypeFormatters?

c# - 如何使用 ExecuteNonQuery 在 VARCHAR(MAX) 列中插入超过 8000 个字符?