Lire les données de publication JSON dans ASP.Net Core MVC

J’ai essayé de trouver une solution à ce problème, mais toutes les solutions à venir sont destinées aux versions précédentes d’ASP.Net.

Je travaille avec le middleware d’authentification JWT et utilise la méthode suivante:

private async Task GenerateToken(HttpContext context) { var username = context.Request.Form["username"]; var password = context.Request.Form["password"]; //Remainder of login code } 

Cela obtient les données envoyées comme s’il s’agissait de données de formulaire, mais mon frontal Angular 2 envoie les données au format JSON.

 login(username: ssortingng, password: ssortingng): Observable { let headers = new Headers({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers }); let body = JSON.ssortingngify({ username: username, password: password });        return this.http.post(this._api.apiUrl + 'token', body, options)            .map((response: Response) => {                           });    } 

Ma solution préférée consiste à l’envoyer au format JSON, mais je n’ai pas réussi à récupérer les données. Je sais que c’est l’envoi, parce que je peux le voir dans le violoniste, et si j’utilise Postman et envoie simplement des données de formulaire, cela fonctionne bien.

Fondamentalement, je dois juste savoir comment changer cette ligne pour lire les données JSON

 var username = context.Request.Form["username"]; 

Au moment où il parvient à votre middleware, le stream de demandes a déjà été lu. Vous pouvez donc faire ceci: Microsoft.AspNetCore.Http.Internal.EnableRewind sur la demande et le lire vous-même.

Site large:

 Startup.cs using Microsoft.AspNetCore.Http.Internal; Startup.Configure(...){ ... //Its important the rewind us added before UseMvc app.Use(next => context => { context.Request.EnableRewind(); return next(context); }); app.UseMvc() ... } 

OU sélectif:

 private async Task GenerateToken(HttpContext context) { context.Request.EnableRewind(); ssortingng jsonData = new StreamReader(context.Request.Body).ReadToEnd(); ... }