2016-02-16 1 views
3

Я инициирую почтовый запрос от Angular2 до действия контроллера ASP.NET 5. Угловая корректно выводит данные и нажимает на действие контроллера, но не отображается на параметры, определенные в действии контроллера, параметры null. Между тем при проверке через Request объект Request.Form имеет правильные текстовые данные, но не привязан к модели.Angular2 Http post request, не связанный с действием контроллера ASP.NET 5

Угловая

let body = JSON.stringify({ firstName: 'Ali' }); 
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 

this.http.post(this.url, body, { headers: headers }) 
      .subscribe(
       (data) => { 
        console.log('Response received'); 
        console.log(data); 
       }, 
       (err) => { console.log('Error'); }, 
       () => console.log('Authentication Complete') 
      ); 

ASP.NET

[HttpPost] 
public IActionResult DemoAction(string firstName) 
{ 
     var req = Request; 

     return null; 
} 

Request.Form имеет данные в форме, как {\"firstName\":\"Ali\"} но параметр firstName является null

+0

Почему вы "stringifying" в JSON? Просто опубликуйте объект json. –

+0

Параметр тела http.post должен быть строкой –

+0

Вы пробовали прямо размещать данные? –

ответ

5

Вы пытаетесь отправить содержание JSON (созданный с использованием метода JSON.stringify) с кодировкой URL-адреса типа контента.

Вы должны попытаться использовать приложения/JSON одно:

let body = JSON.stringify({ firstName: 'Ali' }); 
let headers = new Headers({ 'Content-Type': 'application/json' }); 

this.http.post(this.url, body, { headers: headers }) 

Редактировать

Если вы хотите, чтобы обеспечить содержание формы, вы могли бы использовать в URLSearchParams класс:

var params = new URLSearchParams(); 
params.set('firstName', 'Ali'); 
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 

this.http.post(this.url, params.toString(), { headers: headers }) 
+0

То же самое с приложением content-type/json firstName имеет значение null и даже Form.Request также равно null –

+0

Возможно, вы могли бы использовать класс 'URLSearchParams'. Я обновил свой ответ ... –

+0

У меня есть полная модель со многими свойствами, как я могу установить их в URLSearchParams? –

2

В этом случае вам не требуется передавать заголовок. смотрите здесь. вы можете попробовать это.

this.http.post('/api/ControllerName/DemoAction?firstName=Ali') 
.subscribe(
       (data) => { 
        console.log('Response received'); 
        console.log(data); 
       }, 
       (err) => { console.log('Error'); }, 
       () => console.log('Authentication Complete') 
      ); 

Это, безусловно, работать.


Отредактировано:

Разобрался вашу проблему.

Во-первых: Когда вы получаете параметры на конце API, вы должны использовать вышеприведенную часть.

second: Когда вы получаете object на конце API, вы должны использовать код ниже.

Я показываю вам свою установку, поскольку я не знаю вашего объекта на стороне сервера.

let um=JSON.stringify({ Username: "Hello1",Password:"Hello2"}); 

let headers = new Headers({ 'Content-Type': 'application/json'}); 

this.http.post(this.url+'/Authentication',um,{ headers: headers }) 
         .subscribe(...); 

На стороне сервера у меня следующие настройки.

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

[HttpPost] 
public IHttpActionResult Authentication(UserModel um) // I m getting value here. 
{ 
    if (um.Username == "a" && um.Password == "a") 
    { 
     um.Username = um.Username; 
     um.Password = um.Password; 
     return Ok(um); 
    } 
    return NotFound(); 
} 

Простое решение !! не так ли?

+0

У меня есть полная модель со многими свойствами, firstName - это просто для демонстрации. Я не хочу создавать запрос вручную –

+0

Пожалуйста, проверьте отредактированный ответ, он отлично работает. – micronyks

+0

Теперь он хорошо работает с объектом и его собственностью. :) – micronyks

1

Для меня это работает:

let headers = new Headers({ 'Content-Type': 'application/json' }); 
this.http.post(this.url, JSON.stringify({ firstName: 'Ali' }), { headers: headers })