2017-02-28 14 views
0

我讓數據通話使用如何通過大數據轉化爲服務angular2

this.DataService.add(id).subscribe((addLists:Project.Models.AddModel[]) => { 
this.addLists = addLists; 
}); 

我送1個或多個項目的參數在我的數據服務文件到服務角2,我的MVC代碼之間的數據服務:

add = (Id) => { 
return this.http.get("/site/getItems/getItems?id=" + Id) 
      .map(this.getSuccess) 
      .catch((e) => { 
       if (console && console.log) { 
        console.log(e); 
       } 
       return Observable.throw(e); 
      }); 

}; 

,我讀我的C#代碼值一樣

[RoutePrefix("site/getItems")] 
[NoCache] 
public class AddController 
{ 
    ... initialization code 
    [HttpGet] 
    [Route("getItems")] 
    public IEnumerable<AddModel> GetItems(int id) 
    { 
    ....logic 
    } 
} 

這適用於幾個參數。但是,現在我需要發送由行和列組成的整個模型數據。 我該如何做到這一點?

+0

爲什麼不使用'POST'這個? 'this.http.post(「/ site/getItems/getItems」,complexData)'? – VadimB

回答

0

您可以切換到使用post,因爲您的網址長度在IE中限制爲1024個符號,因此甚至連續排列的非常大的對象都可能超出此大小。

您的客戶端動作可以

this.http.post("/site/getItems/getItems", complexData) 

您的服務器動作可以

[HttpPost] 
[Route("getItems")] 
public IEnumerable<AddModel> GetItems(ComplexData data) 
{ 
....logic 
} 
+0

我不能在此發送更多的參數嗎?我想發送this.http.post(「/ site/getItems/getItems」,普通data1,normaldata2,complexData)。它是給我的錯誤,如果我發送逗號分隔參數這樣在後? – Aruna

+0

不,只有一個。但是你可以將你的數據組合成一個對象,如'{data1:normalData1,data2:normalData2,...}'。並在服務器端創建ViewModel來表示這個對象'class ItemViewModel {SomeObj1 data1,SomeObj2 data2}'。所以你的動作輸入參數可以是'GetItems(ItemViewModel data)'。這適合你嗎? – VadimB

+0

我只發送一個變量(調整我的代碼)。然而,我收到錯誤:{「Message」:「所請求的資源不支持http方法'GET'。」} – Aruna