Почему метод User.Identity.GetUserId () Web Api 2 не работает с myController? - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть 2 контроллера

  1. AccountController // контроллер api
  2. 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(), он показывает идентификатор пользователя.

Так как это работает?

...