Próbowałam ostatnio przekazać postem pojedynczy parametr do kontrolera. Miał to być zwykły napis przechowujący informacje na temat nazwy gry, którą chcemy zaimportować z serwisu BoardGameGeek.
Metoda w moim kontrolerze wyglądała następująco:
[HttpPost]
public JsonResult Add(string name)
{
\\do the magic
}
Od strony frontentu próbowałam kilka podejść:
przekazać nazwę jako zwykły string w body requestu:
private headers = new Headers({ 'Content-Type': 'application/json' });
create(name: string): Promise<string> {
return this.http
.post(`${this._addBoardGameUrl}`, JSON.stringify(name), { headers: this.headers })
.toPromise()
.then(response => { return response.text(); })
.catch(ex => { return new Common().handleError(ex) });
}
Niestety po stronie kontrolera parametr name był nullem. Sprawdziłam debuggerem, name po stronie frontendu był uzupełniony. Szukałam więc dalej rozwiązania.
przekazać nazwę bezpośrednio w url, nie wypełniając body requestu:
create(name: string): Promise<string> {
return this.http
.post(`${this._addBoardGameUrl}` + "/" + name, null)
.toPromise()
.then(response => { return response.text(); })
.catch(ex => { return new Common().handleError(ex) });
}
Nadal null. Po dodaniu headerów bez zmian. Poszukiwanie rozwiązania trwało nadal.
Przekazanie obiektu name w body requestu:
private headers = new Headers({ 'Content-Type': 'application/json' });
create(name: string): Promise<string> {
return this.http
.post(`${this._addBoardGameUrl}`, JSON.stringify({ name: name }), { headers: this.headers })
.toPromise()
.then(response => { return response.text(); })
.catch(ex => { return new Common().handleError(ex) });
}
Wreszcie sukces! Wychodzi na to, że do trzech razy sztuka 😀