2017-02-23 55 views
0

У меня есть форма входа в угловой 2, и я пытаюсь вызвать контроллер токена JWT через вызов API.Передача имени пользователя и пароля JWT Token Controller через форму регистрации Angular 2

Мой user.service.ts выглядит следующим образом: -

login(username, password) { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
    let credentials = JSON.stringify({ username, password }); 
    console.log(username, password); 
    return this._http.post('http://localhost:5000/api/jwt', credentials, { headers: headers }) 
    .map(res => res.json()) 
    .map((res) => { 
     if (res.success) { 
     localStorage.setItem('auth_token', res.auth_token); 
     this.loggedIn = true; 
     } 

     return res.success; 
    }); 
} 

Когда я делаю console.log (имя пользователя, пароль); Я получаю правильное имя пользователя и пароль, введенные в форму.

Тогда у меня есть контроллер следующим образом: -

 [HttpPost] 
    [AllowAnonymous] 
    public async Task<IActionResult> Get(string username, string password) 
    { 

    //code here 

    } 

Моя проблема заключается в том, что имя пользователя и пароль всегда нуль.

Я попытался сделать сообщение с Postman на 'http://localhost:5000/api/jwt' с именем пользователя и паролем, и он отлично работает.

Как передать имя пользователя и пароль контроллеру из формы Angular 2?

Спасибо за вашу помощь и время

Иоганна

ответ

0

Вы установили неверный заголовок Content-Type, он должен быть в формате JSON:

headers.append('Content-Type', 'application/json'); 

Также убедитесь, что вы создаете правильный объект JSON (JSON.stringify({ username, password }) недействителен, и вы получаете ошибку javascript на консоли, говоря, что это не работает):

let credentials = JSON.stringify({ username: username, password: password }); 

И последнее, но не в последнюю очередь ввести модель представления, чтобы соответствовать этой структуре:

public class LoginViewModel 
{ 
    public string Username { get; set; } 
    public string Password { get; set; } 
} 

, что ваши действия контроллера будет принимать в качестве параметра:

public async Task<IActionResult> Get(LoginViewModel loginModel) 
+0

Я попробовал то, что вы сказали, Дарина, и изменил мою ПОЛУЧАЕТ to public async Task Get ([FromForm] ApplicationUser applicationUser) однако я все еще получаю null как в имени пользователя, так и в пароле – Johann

+0

my ApplicationUser точно так же, как ваш LoginViewModel – Johann

+0

Вы не должны использовать '[FromForm]', а скорее '[FromBody ] в этом случае. –

Смежные вопросы