Asp.net Http.Post正在以null形式传递参数

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

我一直在尝试将类对象从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 
  '@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)
 {

 }