如何从 Angular 请求 c# 控制器中的参数? (没有 url 串联)

How can I request parameters in c# controller from Angular? (no url concatenation)

我有一个一般性问题,我似乎无法在其他主题中找到任何答案。 所以我会在这里展示我的代码: 这是我的 register.component.ts:

email = this.registerForm.controls['email'].value;
password = this.registerForm.controls['password'].value;
// call RegisterController
    this.http.post('api/register', params).subscribe(params => {
      this.router.navigate(['']); // redirect to login
    },
      error => console.log(error)
    );

这是我的 C# 控制器:

[Route("api/register")]
[HttpPost]
public void Register(string email = "", string password = "")
{
    email = Request.Query["email"].ToString().Trim();
    password = Request.Query["password"].ToString().Trim();

    ...

}

我的问题是:如何将电子邮件和密码的输入值从 angular 传递到 c#?每次在我的控制器中我都会得到“”。

你可以做的是使用 HttpParams 这似乎更干净的解决方案来解决你的问题

let httpParams = new HttpParams()
    .append("email", "test@test.com")
    .append("password", "Password1");

最后你会得到这个代码

email = this.registerForm.controls['email'].value;
password = this.registerForm.controls['password'].value;

let httpParams = new HttpParams()
    .append("email", email)
    .append("password", password);

// call RegisterController
this.http.post('api/register', httpParams).subscribe(params => {
    this.router.navigate(['']); 
    },
     error => console.log(error)
);

您可以在 asp.net webapi 中创建一个模型,并将来自 angular 的数据作为 json(内容类型:application/json)发送,并且让 web api 格式化程序将其反序列化为您的模型对象

只需在您的后端创建一个模型以将其传递给您的控制器,例如:

public class RegisterModel {
    public string Email { get; set; }
    public string Password { get; set; }
}

然后在你的控制器中传递它

public void Register([FromBody]RegisterModel model)
{
    email = model.Email;
    password = model.Password;

    ...

}

请注意,我们正在添加 [FromBody] 属性以告知 asp 该内容不会作为 url 参数的一部分出现