web-dev-qa-db-ja.com

ASP.Net Core MVCでJSON投稿データを読み取る

私はこれに対する解決策を見つけようとしましたが、これから登場するものはすべて、以前のバージョンのASP.Netに対するものです。

私はJWT認証ミドルウェアを使用しており、次の方法があります。

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

これは、送信されたデータをフォームデータのように取得しますが、my Angular 2フロントエンドが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) => {
                
            });
    }

私の推奨する解決策は、JSONとして送信することですが、データの取得に失敗しました。私はフィドラーでそれを見ることができるので、それが送信していることを知っています、そして私がPostmanを使用してフォームデータを送信するだけなら、それはうまくいきます。

基本的に私はjsonデータを読み取るためにこの行を変更する方法を理解する必要があります

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

ミドルウェアに到達するまでに、要求ストリームは既に読み取られているため、ここで実行できることはMicrosoft.AspNetCore.Http.Internal.EnableRewind on Requestおよび自分で読んで

サイト全体:

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()
...
}

または選択的:

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