Asp.net Http.Post正在以null形式传递参数
我一直在尝试将类对象从angular 6 service post调用传递到web api post方法,api方法成功命中,但我传递的类对象显示为null AngularJS服务:-Asp.net Http.Post正在以null形式传递参数,asp.net,asp.net-mvc,angular,asp.net-web-api,Asp.net,Asp.net Mvc,Angular,Asp.net Web Api,我一直在尝试将类对象从angular 6 service post调用传递到web api post方法,api方法成功命中,但我传递的类对象显示为null AngularJS服务:- import { Injectable } from '@angular/core'; import { User } from './user.model' import { Http, Response, Headers, RequestOptions, RequestMethod } from
import { Injectable } from '@angular/core';
import { User } from './user.model'
import { Http, Response, Headers, RequestOptions, RequestMethod } from
'@angular/http';
import { Observable } from 'rxjs/Observable' ;
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
@Injectable({
providedIn: 'root'
})
export class UserService {
selectedUser: User;
constructor(private http: Http) { }
postUser(user: User) {
debugger;
var body = JSON.stringify(user);
var headerOperations = new Headers({ 'Content-Type': 'application/json'
});
var requestOptions = new RequestOptions({ method: RequestMethod.Post,
headers: headerOperations })
return this.http.post('http://localhost:54516/Account/Register', body,
requestOptions).map(x => x.json);
}
}
Web API方法:
[AllowAnonymous]
[HttpPost]
//[ValidateAntiForgeryToken]
public void Register(User body)
{
}
模型类:
public class User
{
public string Email { get; set; }
public string PhoneNumber { get; set; }
public string Password { get; set; }
public string ConfirmPassword { get; set; }
}
以下是AngularJs侧的数据:
最后,使用null对象的Web Api控制器方法:
COR已在控制器上定义
[EnableCors(origins: "http://localhost:4200",headers:"*", methods:"*")]
首先,您不需要将主体字符串化,您可以删除这一行
var body = JSON.stringify(user);
并尝试将[FromBody]
属性添加到操作的参数中
[AllowAnonymous]
[HttpPost]
//[ValidateAntiForgeryToken]
public void Register([FromBody]User body)
{
}
试试这个:
postUser(user: User) {
let bodyString = JSON.stringify(user);
let headers = new HttpHeaders({ 'Content-Type': 'application/JSON' });
return this._http.post<any>('http://localhost:54516/Account/Register', bodyString, { headers: headers });
}
这意味着您正在传递的数据不是用户类型。可能缺少一些次要内容。请传入
user
,但不要将其字符串化。您不需要使用它。json.stringify。请在没有stringify的情况下直接删除它,但结果仍然是一样的。@nik_boyz First:您必须使用httpClient,而不是http(并且忘记json.stringify)。http确实是“不推荐的”区域。js:2969选项415(不支持的媒体类型)加载失败:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。因此,不允许访问源“”。响应的HTTP状态代码为415。我已经解决了上述问题,但它仍然提供了一个空对象。为什么要使用void方法?不应该是IActionResult
?简单地说,在现实生活中,它会返回一个视图。我尝试过postman,并在api和ui端将参数更改为字符串值,它工作得很好,但当我尝试使用用户类对象时,它再次传递空值。下面是我得到的错误:选项415(不支持的媒体类型)加载失败:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。因此,不允许访问源“”。响应的HTTP状态代码为415。
[AllowAnonymous]
[HttpPost]
//[ValidateAntiForgeryToken]
public void Register([FromBody]User body)
{
}