ASP.NET Core Angular 7 Http Post - требуется сложный объект? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь сделать базовую HTTP-публикацию на серверную часть ASP.NET Core.

Угловой:

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

this.http.post('/UserRole/SaveUserRoles', parms)
    .subscribe(result => { });

Контроллер:

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

Мои параметры показывают ноль. Я могу заставить это работать, создавая сложный объект на стороне C #, но это не то, что я хочу делать. Мне не нужен объект только для 2 параметров.

Чего здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вы должны установить правильный заголовок для вашего запроса, как,

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 => {
});

А для вашей стороны контроллера,

Мне не нужен объект только для 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();
}
0 голосов
/ 08 января 2019

Вы в основном хотите рассматривать ваши данные POST как отдельные параметры. Вы можете отправить их как «параметры», которые будут преобразованы в параметры строки запроса .

params - это свойство второго аргумента для get и третьего аргумента для post для HttpClient.

var body = null;

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

this.http.post('/UserRole/SaveUserRoles', body, {params: parms})
    .subscribe(result => {
    });

Вы хотите обновить контроллер API, чтобы использовать атрибут [FromQuery] для аргументов, которые вы хотите связать.

[HttpPost]
public async Task<IActionResult> SaveUserRoles([FromQuery]string email, [FromQuery]string[] userRoles)
{
    return Ok();
}
...