试图将Angular属性传递给.NET API

试图将Angular属性传递给.NET API,angular,asp.net-web-api,Angular,Asp.net Web Api,我在Angular 5和Asp.NETWebAPI中工作 在angular中,我有服务和组件,所以组件从视图接收参数,如下所示: forgotPass() { this.loading = true; debugger; this._authService.forgotPassword(this.model.email).subscribe( data => { this.toastr.success("Sended success")

我在Angular 5和Asp.NETWebAPI中工作

在angular中,我有服务和组件,所以组件从视图接收参数,如下所示:

forgotPass() {

    this.loading = true;
    debugger;
    this._authService.forgotPassword(this.model.email).subscribe(
      data => {
        this.toastr.success("Sended success")
        this.loading = false;
        LoginCustom.displaySignInForm();
        this.model = {};
      },
      error => {
        this.showAlert('alertForgotPass');
        this._alertService.error(error);
        this.loading = false;
      });
  }
forgotPassword(email: string) {
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    return this.http.post(this.rootUrl + '/ChangePasswordToken', JSON.stringify({ email: email }), options)
      .map((response: Response) => {

      });
  }
和服务执行控制器,如下所示:

forgotPass() {

    this.loading = true;
    debugger;
    this._authService.forgotPassword(this.model.email).subscribe(
      data => {
        this.toastr.success("Sended success")
        this.loading = false;
        LoginCustom.displaySignInForm();
        this.model = {};
      },
      error => {
        this.showAlert('alertForgotPass');
        this._alertService.error(error);
        this.loading = false;
      });
  }
forgotPassword(email: string) {
    let headers = new Headers({ 'Content-Type': 'application/json' });
    let options = new RequestOptions({ headers: headers });

    return this.http.post(this.rootUrl + '/ChangePasswordToken', JSON.stringify({ email: email }), options)
      .map((response: Response) => {

      });
  }
正如您所看到的,我向WebApi发送参数
email
,问题是控制器将其接收为null,但当我对JS进行调试时,它发送电子邮件成功:

控制器:

  [Route("ChangePasswordToken")]
        public async Task<IActionResult> GeneratePasswordChangeToken(string email)
        {//code there}
[路由(“ChangePasswordToken”)]
公共异步任务GeneratePasswordChangeToken(字符串电子邮件)
{//code there}

如果angular发送正确,为什么我在控制器中总是得到null?当您将客户端模型声明为
{email:email}

时,您正在定义一个将发送到服务器的对象。但在服务器端,您需要一个字符串

要解决此问题,您可以:

或者定义与客户模型匹配的C#模型

public class EmailModel
{
    public string Email { get; set; }
}
然后从api方法中的请求主体读取模型

[Route("ChangePasswordToken")]
public async Task<IActionResult> GeneratePasswordChangeToken([FromBody]EmailModel model)
{//model.Email }

另一个关于直接从主体读取字符串的答案是,您正在尝试将JSON对象作为param传递,并尝试将其作为字符串接收。因此它失败了

如果要将单个字符串发送到参数,可以尝试使用如下格式编码:

将内容类型更改为

contentType: 'application/x-www-form-urlencoded'
请求应为:

this.http.post(this.rootUrl + '/ChangePasswordToken', "=" + email, options)

为什么我不能像传递字符串那样简单呢?有什么问题吗?我不明白,我尝试了两种解决方案,但仍然得到相同的错误