Я использую Angular2 с ASP.NET Core MVC, и управление ручной навигацией по URL работает нормально, сервер успешно загружает мое домашнее представление с Angular2.
При аутентификации пользователя я настраиваю переменную сеанса следующим образом:
HttpHelper.HttpContext.Session.SetString("isLoggedIn", true.ToString() );
Что я хочу, так это то, что после того, как пользователь находится в приложении, если он хочет загрузить определенный маршрут, перейдя к нему вручную, я хочу, чтобы моя служба вызывала мой ASP-контроллер, чтобы проверить, прошел ли пользователь уже аутентификацию, чтобы моя защита позволяла маршрутизация. Вместо этого для защиты по умолчанию установлено значение false, и я, очевидно, перенаправляюсь на свою страницу входа.
Вот мой метод контроллера ASP, который я хочу вызвать, чтобы обновить значение IsLoggedIn в моем auth.service:
[HttpGet]
public IActionResult IsConnectedState()
{
if (!String.IsNullOrWhiteSpace(HttpHelper.HttpContext.Session.GetString("isLoggedIn")))
return Ok(true);
else
return Ok(false);
}
так что мой AuthenticationGuard может вызвать AuthenticationService для обновления логического значения, управляющего аутентифицированным состоянием:
alert(this.authService.isLoggedIn);
if (!this.authService.isLoggedIn) {
this.authService.setupLoggedInState().subscribe(() => { });
}
со следующим кодом, обновляющим логическое значение в моем auth.service :
setupLoggedInState() {
alert("Setting Up");
// Setting up the Http call
let lControllerAction: string = "/IsConnectedState";
let lControllerFullURL: string = this.controllerURL + lControllerAction;
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
// Call my ASP Controller IsConnectedState() method
return this.http.get(lControllerFullURL, options)
.map((res: any) => {
// Réponse reçue du WebService
let data = res.json();
alert(data);
if (data == true) {
this.isLoggedIn = true;
}
}
).catch(this.handleError);
}
Когда я выполняю аутентификацию, а затем вручную перехожу к URL-адресу, мой охранник сообщает мне, что логическое значение действительно установлено на «ложь», и я также получаю «Настройка», когда моя служба пытается вызвать http.get. Кажется, ошибка в середине метода, потому что я никогда не добираюсь до точки останова, которую я установил в своем ASP-контроллере. Я получаю следующую ошибку, которую я не понимаю:
"platform-browser.umd.js:937 EXCEPTION: Error: Uncaught (in promise): TypeError: Cannot read property 'toString' of null"
Может ли это быть из-за того, что я не вызываю службу в нужный момент в моем auth.guard? Все мои другие вызовы, такие как аутентификация, работают с http.post без каких-либо проблем, поэтому я действительно не понимаю, откуда возникает проблема...
Любая помощь будет принята с благодарностью.