SmartestVEGA
SmartestVEGA

Reputation: 8889

Web API post array but frombody is always null

I have array in the following format which i need to post to an API :

console.log(addserverList);

Array

I want to pass this to a post method of api

   const options = {headers: {'Content-Type': 'application/json'}};
            return this.http.post(           'http://localhost:54721/api/BulkUpload/SaveBulkUploadData',addserverList,options)

I am able post to api, but the data passes is always showing as NULL

Null value

Model i structured like below:

model

Function to generate array

private extractData(res: Response) {

        let csvData = res['_body'] || '';
        let allTextLines = csvData.split(/\r\n|\n/);
        let headers = allTextLines[0].split(',');
        let lines = [];

        for ( let i = 0; i < allTextLines.length; i++) {
            // split content based on comma
            let data = allTextLines[i].split(',');
            if (data.length == headers.length) {
                let tarr = [];
                for ( let j = 0; j < headers.length; j++) {
                    tarr.push(data[j]);
                }
                lines.push(tarr);
            }
        }
        this.csvData = lines;

       // console.log(JSON.stringify(this.csvData));
        this.saveBulkUpload();  
      }

Upvotes: 1

Views: 3745

Answers (1)

SBFrancies
SBFrancies

Reputation: 4240

Your JSON is an array of arrays. The method is expecting an array of objects which match the format of the AddServer class.

Your JSON should look something like this:

[
   {
        "HostName": "Server1", 
        "Type1": "type1_1", 
        "Type2": "type1_1", 
    },
    {
        "HostName": "Server2", 
        "Type1": "type1_2", 
        "Type2": "type2_2",  
    }
]

Change to function

This has required some guesswork as I don't know the service contract which is feeding into the function but what needs to be changed is in the loop.

for ( let i = 0; i < allTextLines.length; i++) {
        // split content based on comma
        let data = allTextLines[i].split(',');

        if (data.length == headers.length) {
            let tobj = {};

            tobj.HostName = data[0];
            tobj.Type1= data[1];
            tobj.Type2= data[2];

            lines.push(tobj);
        }
    }

Upvotes: 5

Related Questions