这是我的angular2代码
addHero(name: string): Promise<Hero> {
let body = JSON.stringify({ name: name });
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this._heroUrlPost, name, options)
.toPromise()
.then(res => <Hero>res.json().data)
.catch(this.handleError);
}
在MVC控制器中,我的操作方法如下:
[HttpPost]
public JsonResult PostHeroes([FromBody]string name)
{
//var name1 = Request.Form["name"].ToString();
if (!string.IsNullOrEmpty(name))
{
var hero1 = new Heroes()
{
HeroName = name
};
_dbContext.Hero.Add(hero1);
_dbContext.SaveChanges();
return Json(new { data = hero1 });
}
return Json(new { data="Not Saved"});
}
我总是得到null。如果我使用复杂的类型我得到属性为null。在这种简单的情况下,如何使它正确吗? 更新:
return this.http.post(this._heroUrlPost, body, options)
.toPromise()
.then(res => <Hero>res.json())
.catch(this.handleError);
答案 0 :(得分:1)
您的代码暗示您的响应有效负载中有data
属性:
return this.http.post(this._heroUrlPost, body, options)
.toPromise()
.then(res => <Hero>res.json().data) // <-----
.catch(this.handleError);
类似的东西:
{
"data": {
(...)
}
}
是这样的吗?你应该使用这个:
return this.http.post(this._heroUrlPost, body, options)
.toPromise()
.then(res => <Hero>res.json()) // <-----
.catch(this.handleError);
修改强>
我认为你需要发送一个url编码的表单而不是JSON数据。这可以这样做:
addHero(name: string): Promise<Hero> {
var params = new URLSearchParams();
params.set('name', name);
let body = params.toString();
let headers = new Headers({
'Content-Type': 'application/x-www-form-urlencoded'
});
let options = new RequestOptions({ headers: headers });
return this.http.post(this._heroUrlPost, name, options)
.toPromise()
.then(res => res.json().data)
.catch(this.handleError);
}
如果您需要将名称作为查询参数传递,请使用:
let options = new RequestOptions({ headers: headers, search: params });
不要忘记导入URLSearchParams
课程。
和
控制器方法
public JsonResult PostHeroes(字符串名称)
看到这个问题: