ASP.NET Core Angular 7 Http发布-需要复杂对象吗?

ahe*_*ick 1 c# angular-http asp.net-core angular

我正在尝试向ASP.NET Core后端进行基本的HTTP发布。

角度:

var parms = {
    userRoles: ['User', 'Worker'],
    email: 'email@email.com'
};

this.http.post('/UserRole/SaveUserRoles', parms)
    .subscribe(result => { });
Run Code Online (Sandbox Code Playgroud)

控制器:

[HttpPost]
public async Task<IActionResult> SaveUserRoles([FromBody]string[] userRoles, string email)
{
    return Ok();
}
Run Code Online (Sandbox Code Playgroud)

我的参数显示为空。我可以通过创建一个复杂的对象C#端来使其正常工作,但这不是我想要的。我不需要仅用于2个参数的对象。

这里缺少什么?

er-*_*sho 5

您必须为请求设置适当的标头,例如

var postData = {
        userRoles: ['User', 'Worker'],
        email: 'email@email.com'
    };

const headers: HttpHeaders = new  HttpHeaders();
headers.set('Content-Type', 'application/x-www-form-urlencoded');

this.http.post('/UserRole/SaveUserRoles', postData, { headers: headers })
    .subscribe(result => {
});
Run Code Online (Sandbox Code Playgroud)

对于您的控制器方面,

我不需要仅用于2个参数的对象。

但这是在模型或c#对象中捕获所有已发布数据的好习惯。

所以在这里我创建一个示例类。

class PostData
{
    public string[] userRoles { get; set; }
    public string email { get; set; }
}

[HttpPost]
public async Task<IActionResult> SaveUserRoles([FromBody]PostData postData)
{
    return Ok();
}
Run Code Online (Sandbox Code Playgroud)