2017-08-23 8 views
0

POSTメソッドを使用して、クライアントからASP.NET MVCサーバーにデータを送信したいと思います。 Web APIアクションが呼び出されましたが、データはサーバーに送信されていません。私がFiddlerを開くと、データが表示されます。ここ は私のコードです:角2 POSTは、ASP.NETサーバーにデータを送信しません

クライアント

let headers = new Headers(); 
headers.append('Content-Type', 'application/x-www-form-urlencoded'); 
this.http.post('http://localhost/app/api/Users/', 'hello', { headers: headers, withCredentials: true }) 
    .subscribe(user => { 
    console.log(user); 
    }); 

サーバー

[HttpPost] 
    public void Post([FromBody]string data) 
    { 
     //data is null 
    } 

どこに問題がありますか?アドバイスありがとう。

答えて

0

値はエンコードされたものではなく、content-typeヘッダーで指定した値です。これに値を変更します。

'=hello' 

全コール

this.http.post('http://localhost/app/api/Users/', '=hello', { headers: headers, withCredentials: true }) 
    .subscribe(user => { 
    console.log(user); 
    }); 
0

アプリケーション/ x-www-form-urlencodedで使用している場合、あなたはFORMDATAを使用する必要があります。

let data = new FormData(); 
data.append('data': 'hello'); 
+0

[OK]を、私は 'アプリケーション/ json'を使用する場合、私は不正なレスポンス401を取得:

一つの可能​​性は、そのように、変数名を照合して、JSONに体をシリアル化することです。どうして?私はWindows認証を使用します。そして、GETは 'withCredentials:true'を追加するとOKです。 – bluray

+0

なぜFromBodyを使っているのですか?どうしてですか:[HttpPost( "{data}")] public void Post(文字列データ) – Carsten

+0

FormDataを使用すると、私の応答は401 Unauthorizedとなります – bluray

0

ASP.NET正しいコンテンツタイプを指定しておらず、受信したボディと変数の名前とのマッチについて手がかりを与えないと、ボディをデシリアライズしません。

let model = { data: "Hello" } 
    let req = new Headers(); 
    req.headers.append('content-type', 'application/json'); 

    let body = JSON.stringify(model); 

    this.http.post(url, body, req).subscribe(...) 
関連する問題