Lesen JSON post-data-in ASP.Net Kern MVC
Ich habe versucht, eine Lösung zu finden für dieses, aber alle die, die kommen werden, die für Vorherige Versionen von ASP.Net.
Arbeite ich mit der JWT-Authentifizierung, middleware und haben die folgende Methode:
private async Task GenerateToken(HttpContext context)
{
var username = context.Request.Form["username"];
var password = context.Request.Form["password"];
//Remainder of login code
}
Bekommt dieser die gesendeten Daten wie in Formular-Daten, aber mein Winkel-2 front-end sendet die Daten als JSON.
login(username: string, password: string): Observable<boolean> {
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
let body = JSON.stringify({ username: username, password: password });
return this.http.post(this._api.apiUrl + 'token', body, options)
.map((response: Response) => {
});
}
Meine bevorzugte Lösung ist, senden Sie es als JSON, aber ich habe nicht das abrufen der Daten. Ich weiß, es ist das senden, denn ich kann es sehen in fiddler, und wenn ich Briefträger und sendet einfach Daten in das Formular funktioniert es einwandfrei.
Im Grunde brauche ich nur, um herauszufinden, wie zu ändern Sie diese Zeile zu Lesen, die json-Daten
var username = context.Request.Form["username"];
- warum gehst du nicht einfach wechseln Sie die login-Funktion zu verwenden, Content-Type
application/x-www-form-urlencoded
und nur die url-Kodieren von json - Ich würde gerne das komplette Frontend in der Lage sein zu senden, json, anstatt einige json verwenden, und einige verwenden Sie Formular-Daten. Ich habe tatsächlich versuchen, diese route, obwohl, und hatte eine harte Zeit, um die Daten zu senden, korrekt als form-Daten. Sogar mit Beispielen, die ich es nicht geschafft, die beiden miteinander zu reden, richtig.
- sollten Sie gerade nicht in der Lage sein, dies zu tun?
encodeURIComponent(JSON.stringify({ username: username, password: password }));
- Nein, es ist komplizierter als das.
- Nach dem Kampf mit den beiden Strecken dachte ich, die einfachste Lösung Bestand darin, herauszufinden, wie man bei json-Daten.
- Ich arbeite mit IdentityServer4 und so weit wie ich kann sagen, es tut die gleiche Sache, das ist sehr ärgerlich Id lieber json als gut. Wenn ich eine Antwort finden werde ich Sie wissen lassen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Durch die Zeit wird es mit der middleware die Anfrage Datenstrom wurde bereits gelesen, was Sie hier tun können, ist Microsoft.AspNetCore.Http.Intern.EnableRewind auf die Anfrage und Lesen Sie es selbst
Website Breite :
ODER selektiv :
EnableRewind
sowohl in der middleware und in IhremGenerateToken
Methode?context.Request.Body.Position = 0;
zwischen diesen beiden Linien. Ansonsten ist der reader gibt eine leere Zeichenfolge zurück, da der server bereits das Ende erreicht der Körper auf seine eigenen.context.Request.Body.Position = 0;
nachdem dieStreamReader
sonst meine Post wurden immer leerer Körper.