Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

Daten von Windows 10 an Web-API senden.

03.07.2018 (👁20044)

Daten von Windows 10 an Web-API senden.

Dieses Code-Beispiel  zeigt, wie man Daten von einem lokalen Windows 10 Client an einen Webserver Asp.Net Core Web-Api anfügt

Dabei sendet eine lokale Windows 10 UWP Anwendung Daten als Json-Format an die Web-Api Schnittstelle des Webservers. Dort werden die Daten in die SQL-Datenbank angefügt

Gezeigt wird die HttpPost Methode zum Erstellen von neuen Daten.

Funktionsweise:

Der Client macht folgendes:

Daten aus SQlite lokaler Datenbank laden und in Json übertragen. Dann mit einem HttpClient und HttpPost senden an den Web-Server

Der Server macht folgendes:

Unter der HttpPost Methode übernimmt er die Anfrage und lädt die Daten aus dem Request-Body. Die Daten werden aus Json in einen Datensatz übertragen und gespeichert.

Beispiel Code

Code in C#

Client = UWP App Anwendung in Windows 10

Server=Asp.Net Core MVC Api

 

Json, HttpPut, REST, Web-Api, Sqlite und SQL-Server

API Client

UWP Client

SQLite, Json

 

 

    HttpClient client = await Create_HttpClient_with_UserToken();

            string IDDetail = "123abc";

            //< read webApi >

            //*httpPut /api/projects

            string sUrl_Api_Create = app_settings._Api_Server + "/api/projects";

            HttpResponseMessage httpResponseMessage = null;

            try

            {

                //< create Upload_Content >

                JsonObject jsonObject = new JsonObject();

                jsonObject["IDDetail"] = JsonValue.CreateStringValue(IDDetail);

                jsonObject["Title"] = JsonValue.CreateStringValue("this is a Title");

                StringContent string_to_Upload_Content = new StringContent(jsonObject.Stringify());

                //</ create Upload_Content >

 

                //< upload >

                //httpPost=Create

                httpResponseMessage = await client.PostAsync(sUrl_Api_Create, string_to_Upload_Content );

                //</ upload >

          ..

 

 

Screenshot beim Senden der Daten

Zeigt: die Daten sind von der SQLite Datenbank in den Json Object eingefügt und werden gesendet

Web-Server

Asp.Net Core Web-API

 

 

//HttpPost URL=/api/projects  

//*Post=Create, Put=Update

[HttpPost]

public async Task<ActionResult> Create()

{

    //-------------< Create() >------------- 

    ..

    //--< Read UploadData >--

    StreamReader reader = new StreamReader(Request.Body);

    JObject jsonData = JObject.Parse(reader.ReadToEnd());

    string IDDetail = jsonData.GetValue("IDDetail").ToString();

    string sTitle = jsonData.GetValue("Title").ToString();

    //--</ Read UploadData >--

 

 

    //< Create Data >

    ProjectModel project = new ProjectModel();

 

    project.IDOwner = IDCurrent_User;

    project.Title = sTitle;

    project.DtCreated = DateTime.Now;

 

    //</ Create Data >

 

 

    //< add recordset >

    _dbContext.tbl_Projects.Add(project);      

    await _dbContext.SaveChangesAsync(true);

    //</ add recordset >

 

    //< out >

    //*output to client

    return Ok();

    //</ out >

    //-------------</ Create() >------------- 

}

ScreenShot auf dem Webserver Webapi beim ankommen der Daten.

Das Screenshot des Debuggers zeigt, dass die daten aus dem Request.Body in ein Json-Object entnommen gelesen werden und dort per Key-Pair entnommen werden können

Kompletter Code

Beispiel, C#

Kompletter Code der Sende-Methode in UWP

private async Task<bool> Api_Add_Projects()

{

    //--------< Api_Add_Projects() >--------

    if (optStop.IsChecked == truereturn false;

    fx_Log("--< API:Api_Add_Projects >--");

 

    //---------------< read_API_Data() >---------------

 

    HttpClient client = await Create_HttpClient_with_UserToken();

 

    //----< Check_to_local >----

    //< find record >

    string sSQL = "SELECT * FROM tbl_Details WHERE [IDProject_on_Server] IS NULL";

    SqliteDataReader dataReader = clsDB.Get_DataReader(sSQL);

    if (dataReader.HasRows == true)

    {

        while (dataReader.Read())

        {

            //---< NoMatch: Delete on Server >---

            string IDDetail = dataReader["IDDetail"].ToString();

            fx_Log("add Project IDDetail:" + IDDetail);

            //</ nomatch >

 

            //< read webApi >

            //*httpPut /api/projects

            string sUrl_Api_Create = app_settings._Api_Server + "/api/projects";

            HttpResponseMessage httpResponseMessage = null;

            try

            {

                //< create Upload_Content >

                JsonObject jsonObject = new JsonObject();

                jsonObject["IDDetail"] = JsonValue.CreateStringValue(IDDetail);

                jsonObject["Title"] = JsonValue.CreateStringValue("this is a Title");

                StringContent string_to_Upload_Content = new StringContent(jsonObject.Stringify());

                //</ create Upload_Content >

 

                //< upload >

                //httpPost=Create

                httpResponseMessage = await client.PostAsync(sUrl_Api_Create, string_to_Upload_Content );

                //</ upload >

                

                //< result >

                var NewID = httpResponseMessage.Content.ToString();

                //</ result >

 

                fx_Log("ok.Created ");

            }

            catch (Exception ex)

            {

 

                fx_Log("Error Delete byWebsite: " + ex.Message);

                //return;

            }

            //</ read webApi >

            //---</ NoMatch: Delete on Server >---

        }

    }

 

    //----</ @Loop: Projects_on_Server >----

    //----</ get Projects-List >----

    //---------------</ read_API_Data() >---------------

 

 

 

    fx_Log("--</ API:Api_Add_Projects >--");

    fx_Log("");

 

    return true;

 

    //--------</ Api_Add_Projects() >--------

}

Kompletter Code der Web-API Schnittstelle auf der Server

 

//HttpPost URL=/api/projects  

//*Post=Create, Put=Update

[HttpPost]

public async Task<ActionResult> Create()

{

    //-------------< Create() >------------- 

    //< get UserClaim Info >

    //*get User from Token

    var userClaim_in_Token = HttpContext.User.Claims.Where(c => c.Type == ClaimsIdentity.DefaultNameClaimType).FirstOrDefault(); //User as Name

    if (userClaim_in_Token == null)

    {

        return null;

    }

    string sEmail = userClaim_in_Token.Value;

    //</ get UserClaim Info >

 

    //< check user >

    long IDCurrent_User = await Get_UserID(sEmail);

    //</ check user >

 

    //--< Read UploadData >--

    StreamReader reader = new StreamReader(Request.Body);

    JObject jsonData = JObject.Parse(reader.ReadToEnd());

    string IDDetail = jsonData.GetValue("IDDetail").ToString();

    string sTitle = jsonData.GetValue("Title").ToString();

    //--</ Read UploadData >--

 

 

    //< Create Data >

    ProjectModel project = new ProjectModel();

 

    project.IDOwner = IDCurrent_User;

    project.Title = sTitle;

    project.DtCreated = DateTime.Now;

    //</ Create Data >

 

 

    //< add recordset >

    _dbContext.tbl_Projects.Add(project);      

    //</ add recordset >

 

    //< save sqlserver >

    await _dbContext.SaveChangesAsync(true);

    //</ save sqlserver >

 

    //< out >

    //*output to client

    return Ok();

    //</ out >

    //-------------</ Create() >------------- 

}