我已使用 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/