У меня есть 2 контроллера
- AccountController // контроллер api
- MyController // обычный контроллер
Когда я вызываю контроллер api ( Контроллер аккаунта), я могу получить UserID
. Это означает, что пользователь уже вошел в систему, но еще не вышел из системы
[Authorize]
[Route("ShowMessage")]
public string GET()
{
string id;
id = User.Identity.GetUserId();
System.Diagnostics.Debug.WriteLine("UserID = " + id);
return "Success";
}
Я звоню по вышеуказанному коду, используя ajax
$.ajax({
url: '/api/Account/ShowMessage',
method: 'GET',
headers: {
'Authorization': 'Bearer ' + localStorage.getItem('accessToken')
},
success: function (data) {
console.log('success login data');
},
error: function (error) {
console.log('Login Failed');
}
});
, когда пользователь вызывает другое представление MyAccount.cs html. он снова проверит, существует ли ID пользователя в методе действия MyAccount()
, но выдает null
public ActionResult MyAccount()
{
string UserID = "";
if (User.Identity.GetUserId() == null) // throws null
{
System.Diagnostics.Debug.WriteLine("userID is null");
return RedirectToAction("Index", "Home");
}
else
{
// my code...
}
}
Метод Api GET () может получить UserID
, что означает: Token
действует. Но почему с моего обычного контроллера не может получить UserID
NOTE
Как только я удалю куки из браузера и снова войду в систему, тогда и API, и мой контроллер получат ИД пользователя
ОБНОВЛЕНИЕ
Если я добавлю [Authorize]
в метод ActionResult MyAccount()
, отобразится ошибка 401. Но в то же время, когда я вызываю ajax для метода веб-контроллера GET()
, он показывает идентификатор пользователя.
Так как это работает?