Angular2 Http post请求不绑定到ASP.NET 5控制器的操作

时间:2016-02-16 12:23:15

标签: asp.net-mvc asp.net-core angular

我正在从Angular2发起对ASP.NET 5控制器操作的发布请求。 Angular正确发布数据并命中控制器操作,但它没有映射到控制器操作中定义的参数,参数为null。同时,通过Request检查对象Request.Form具有正确的文本数据但不绑定到模型。

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\"},但参数firstNamenull

3 个答案:

答案 0 :(得分:5)

您尝试使用内容类型url编码格式发送JSON内容(使用JSON.stringify方法创建)。

您应该尝试使用application / json one:

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 })

答案 1 :(得分:3)

在这种情况下,您不需要传递标题。看看这里你可以试试这个。

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端收到参数时,你必须使用上面部分。

第二:当您在API端收到object时,您必须使用以下代码。

我正在向您展示我的设置,因为我不知道您在服务器端的对象。

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();
}

简单的解决方案!不是吗?

答案 2 :(得分:1)

对我来说,它有效:

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