我正在从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\"}
,但参数firstName
为null
答案 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 })