I have an GUI application which is a xamarin forms application. The application talks to a python Flask service which has several endpoints defined in it.
For example, it the GUI wants to get a list of users, it will make a HTTPS request on the uir ("http://127.0.0.1:5000/MyCompany/employeelist/") and the Flask service has an endpoint defined which services this GET request.
Client Code in Xamarin Forms: (Currently running the UWP version) Task.Run(async () => await GetFromServerAsync(uri)); // Code executes this line public class TokenStructure { private string token; public string Token // This is your property { get => token; set => token = value; } private string oneTime; public string OneTime // This is your property { get => oneTime; set => oneTime = value; } } // This part of code gets the Token from a service which the GUI application //will store. public async Task<string> GetFromServerAsync(Uri uri) { Windows.Web.Http.HttpClient client = PreparedClientAsync(); Windows.Web.Http.HttpResponseMessage response; try { var content = new HttpStringContent ( JsonConvert.SerializeObject(new { UserName = Username, Password = Password, MacAddress = MacAddress }), UnicodeEncoding.Utf8, "application/json"); response = await client.PutAsync(uri, content); if (response.IsSuccessStatusCode) { var result = await response.Content.ReadAsStringAsync(); TokenString = JsonConvert.DeserializeObject<TokenStructure>(result).Token; return TokenString; } else return "Unauthorized access"; } catch (Exception ex) { return "PUT operation failed."; } } private Windows.Web.Http.HttpClient PreparedClientAsync() { var filter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter(); filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.Expired); filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.Untrusted); filter.IgnorableServerCertificateErrors.Add(ChainValidationResult.InvalidName); Windows.Web.Http.HttpClient client = new Windows.Web.Http.HttpClient(filter); return client; } // In another page in the application: // In this part, the GUI application makes a call on the following uri to get //information from the Flask service. This endpoint calls the ```get``` in the //FlaskService code below. string endpoint = "http://127.0.0.1:5000/MyCompany/employeelist/"; information = await information.GetStatusInformation(endpoint); public async Task<StateClass> GetStatusInformation(string uri) { FSTDStateInformation jsonData = null; try { HttpResponseMessage response = await httpClient.GetAsync(uri); if (response.IsSuccessStatusCode) { string JsonContent = await response.Content.ReadAsStringAsync(); jsonData = JsonConvert.DeserializeObject<StateClass>(JsonContent); } } catch (Exception ex) { Debug.WriteLine("\tERROR {0}", ex.Message); } } # Excerpt of the Flask service code api.add_resource( MyEmployees, "/<string:CompanyName>/employeelist", endpoint="/employeelist") class MyEmployees(Resource): def get(self, CompanyName): # Code goes here The issue I am having is the following.
- From my GUI application, I want to be able to send also a token value with my
("http://127.0.0.1:5000/MyCompany/employeelist/)and the Flask Service will ONLY ALLOW me to service the GET command if the token value is valid.
I do not understand how to send the token value as a header from the GUI to the Flask Service. I do not want to append it to every single uri in the GUI as I could have many more uri and appending it to every single uri will not be an efficient solution.
Is there any "clean" and logical way to do it? I am really new to flask service.
Thanks to All.