0

Я пытаюсь написать службу входа в систему (в машинописном тексте), которая отправляет имя пользователя и пароль моему контроллеру C#. Затем контроллер C# делает вызов службы, который попадает в мою базу данных для аутентификации пользователя, но это выходит за рамки этого вопроса.Функция углового обслуживания не определена - MVC6

Вопрос заключается в том, что, когда я пытаюсь вызвать мою функцию аутентификации (который находится в моей угловой службе) от моего углового регулятора, я получаю сообщение об ошибке в моей консоли, что unable to get property 'Authenticate' of undefined or null reference.

Вот базовый класс (Handler) для моих услуг:

module app.Services { 
export class HttpHandlerService { 
    httpService: ng.IHttpService; 
    handlerUrl: string; 

    constructor($http: ng.IHttpService) { 
     super(); 
     this.httpService = $http; 
    } 

    useGetHandler(params: any): ng.IPromise<any> { 
     var result: ng.IPromise<any> = this.httpService.get(this.handlerUrl, params) 
      .then((response: any): ng.IPromise<any> => this.handlerResponded(response, params)); 
     return result; 
    } 

    usePostHandler(params: any): ng.IPromise<any> { 
     var result: ng.IPromise<any> = this.httpService.post(this.handlerUrl, params) 
      .then((response: any): ng.IPromise<any> => this.handlerResponded(response, params)); 
     return result; 
    } 

    handlerResponded(response: any, params: any): any { 
     response.data.requestParams = params; 
     return response.data; 
    } 

} 
} 

Тогда моя служба Войти наследует его:

module app.Services { 
export interface ILoginService { 
    Authenticate(email: string, password: string): ng.IPromise<any>; 
} 

export class LoginService extends Services.HttpHandlerService { 

    static $inject = ['$http']; 

    constructor($http: ng.IHttpService) { 
     this.handlerUrl = '/Login'; 
     super($http); 
    } 

    // Authentication function I am attempting to call 
    Authenticate(email: string, password: string): ng.IPromise<any> { 

     // I have not completed the actual request that is being sent 
     var config: any = {}; 
     var request = { 
      "Email": email, 
      "Password": password 
     } 

     return this.usePostHandler(config); 
    } 
} 
angular.module('App').factory('loginService', LoginService); 
} 

Вот мой контроллер Войти, где я вызова службы:

module app.Login { 

import Services = app.Services; 

interface ILoginController { 
    email: string; 
    password: string; 
    login(): void; 
} 

class LoginController implements ILoginController{ 
    email: string; 
    password: string; 
    loginService: Services.ILoginService; 

    loginForm: any; 
    static $inject = ["$state"]; 
    constructor(private $state: ng.ui.IStateParamsService, loginService: Services.ILoginService) { 
     this.email = ""; 
     this.password = ""; 
     this.loginService = loginService; 
    } 

    login() { 
     if (this.loginForm.$invalid) { 
      return; 
     } 

     var request = this.loginService.Authenticate(this.email, this.password); 

     request.success(function (data) { 
      console.log("User authenticated."); 
     }); 

     request.error(function() { 
      console.log("Error: User not authenticated."); 
     }); 
    } 
} 
angular.module('App').controller('loginController', LoginController); 
} 

И, наконец, мой C# контроллер»

[HttpPost] 
[Route("/Login")] 
public async Task<IActionResult> Login() 
{ 
    // . . . . 
} 

Любая помощь будет оценена. Дайте мне знать, если вам нужна дополнительная информация.

EDIT:

Это Javascript генерируется из машинописи Войти службы:

var __extends = (this && this.__extends) || function (d, b) { 

for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; 

function __() { this.constructor = d; } 

d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); 

}; 

var app; 

(function (app) { 

var Services; 

(function (Services) { 

    var LoginService = (function (_super) { 

     __extends(LoginService, _super); 

     function LoginService($http) { 

      this.handlerUrl = '/Login'; 

      _super.call(this, $http); 

     } 

     LoginService.prototype.Authenticate = function (email, password) { 

      var config = {}; 

      var request = { 

       "Email": email, 

       "Password": password 

      }; 

      return this.usePostHandler(config); 

     }; 

     LoginService.$inject = ['$http']; 

     return LoginService; 

    })(Services.HttpHandlerService); 

    Services.LoginService = LoginService; 

    angular.module('App').factory('loginService', LoginService); 

})(Services = app.Services || (app.Services = {})); 

})(app || (app = {})); 

Я получаю ошибку, только в IE, что _super не определено.

+0

Что такое точное сообщение об ошибке? Функция Authenticate не определена или свойство loginService не определено? – goenning

+0

'Не удалось получить свойство« Authenticate »неопределенной или нулевой ссылки. – cfly24

ответ

0

Unable to get property 'Authenticate' of undefined or null reference. означает, что this.loginService не был правильно введен угловым.

Вы можете попробовать это изменить:

static $inject = ["$state"];

к этому:

static $inject = ["$state", "LoginService"];

Proper Dependency Injection in Your AngularJS TypeScript Apps

+0

К сожалению, это не решило ошибку – cfly24

+0

На самом деле, похоже, что она не обновляла JS. Теперь я получаю ошибку «неизвестный провайдер: LoginServiceProvider», который, вероятно, просто отсутствует. – cfly24

+0

Оказывается, это недостающая ссылка, все в порядке! – cfly24