A small post for my own reference, and yours if you need it.
It took me a while to get this working. In ASP.NET 5, the WebAPI Controller is no longer the same as the WebAPI 2 Controllers we’re used to.
These Controllers are quite specific on how they accept content. Aurelia has an easy way of posting to a Controller:
import {HttpClient} from 'aurelia-http-client' @inject(HttpClient) export class MyViewModel { constructor(http) { this.http = http; } callService() { this.http.post('http://some/url', { value: 'test' }); } }
In the Controller, you might have something like:
[HttpPost] public string Post([FromBody]MyDTO myDto){ var value = myDto.value; //.... }
However, this won’t work. Aurelia will post this as text/plain
, whereas our Controller expects JSON.
The solution is the more verbose way of constructing a request in Aurelia:
this.http.createRequest('http://some/url') .asPost() .withHeader('Content-Type', 'application/json; charset=utf-8') .withContent({ value: 'test' }) .send() .then(response => { console.log(response.response); }) .catch(err => { console.log(err); });
Problem solved! ASP.NET will map your JSON to the .NET class (myDTO
in the example above).