2017-08-23 135 views
0

我想使用POST方法將數據從客戶端發送到ASP.NET MVC服務器。 Web api動作被調用,但數據尚未發送到服務器。當我打開Fiddler時,我看到數據。 這裏是我的代碼:Angular 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窗體-urlencoded,你必須使用FORMDATA:

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

好了,但是當我使用'應用程序/ json',我得到響應401授權。爲什麼?我使用Windows身份驗證。和GET是好的,當我添加'withCredentials:true' – bluray

+0

爲什麼你使用FromBody的方式?爲什麼不只是:[HttpPost(「{data}」)] public void Post(字符串數據) – Carsten

+0

當我使用FormData時,我的回覆是401未授權 – bluray

0

ASP.NET如果你沒有指定正確的內容類型並且提供關於接收到的body和變量名稱之間的匹配的線索,那麼將不會反序列化body。

一種可能性是身體序列化到JSON,相匹配的變量名,這樣的:

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(...) 
相關問題