For BioStar 2 v2.7.10 or higher, you can use the new BioStar 2 Local API. 

The following article has detailed information on how to start using BioStar 2 New Local API : 

[BioStar 2 API] How To Use BioStar 2 New Local API

 

In this article, we'll take a closer look at a sample application that I made for those who are familiar with C# or standalone Windows applications. 

Since BioStar 2 New Local API is RESTful API, those who are not familiar with RESTful API might have difficulties implementing their own applications with BioStar 2 New Local API. 

Therefore, I’d like to guide them to kick-start their development with the sample application in this article.  


Step 1: Install HTTPS Certificate

1) Please confirm if BioStar 2 Server is running with HTTPS option. In addition, please check whether BioStar 2 Page is Not secure or not. BioStar 2 enables HTTPS as default and the administrator needs to have HTTPS certificate in advance.

[Figure 1. BioStar 2 Page]


2) If you do not install HTTPS certificate, you would see the Not secure page like above. In this case, you should install HTTPS Certificate first. Access BioStar 2 webpage where you can find [Download https certification install program] as follows.

[Figure 2. HTTPS Certificate Program]


Unzip the downloaded file.

[Figure 3. Unzip files]


3) Run cert-register.exe as administrator and enter the server IP address with the port number.


 [Figure 4. BioStar 2 Server Setting]

[Figure 5. BioStar 2 HTTPS Certificate Program- Enter BioStar 2 Server IP address with the port]

[Figure 6. Popup: Please confirm if the IP address is your entered IP address(Server IP)]


Step 2: Refer to the below example

This sample application is a Visual C# console application and includes a basic function: login.


Since BioStar 2 uses HTTPS,  below codes need to be added to the source code.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };  


Without the above code, you may have the below error code.

- The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel, and then, implement your original source code. 


We highly recommend that searching StackOverflow and then, add more lines that are relevant to HTTPS trusted certificate.


(Example: Login API)

static async void LoginTask()
        {
            string resourceAddress = "https://192.168.13.32:456/api/login"; //Enter your BioStar 2 address

            HttpClient httpClient = new HttpClient();
            
            JavaScriptSerializer serializer = new JavaScriptSerializer();
                 
            Dictionary<string, string> dicLoginUser = new Dictionary<string, string>();
           
            dicLoginUser.Add("login_id", "admin"); // Enter BioStar 2 Admin Login ID
            dicLoginUser.Add("password", "biostar2"); // Enter your password of BioStar 2 Admin
            Dictionary<string, object> dicLogin = new Dictionary<string, object>();
            dicLogin.Add("User", dicLoginUser);

            string jsonLoginUser = serializer.Serialize(dicLogin);
                        
            StringContent sc = new StringContent(jsonLoginUser, Encoding.UTF8, "application/json");

            // To load HTTPS Certificate
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            
            //This is an example line to allow the certificate check is secure. You can have your own line for better secure of your application.
            //Please search stackoverflow for the error description - The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.
            //A common reason you may receive the error above Could not establish trust relationship for the SSL/TLS secure channel is because the SSL certificate isn't trusted. 
            System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };                         

            HttpResponseMessage httpResponse = await httpClient.PostAsync(resourceAddress, sc);
            

            if(httpResponse.IsSuccessStatusCode == true)
            {
                Console.WriteLine(httpResponse.ToString());
                string httpResponseBody = await httpResponse.Content.ReadAsStringAsync();                
                Console.WriteLine(httpResponseBody);
                

                MemoryStream responseMemoryStream = new MemoryStream();
                StreamWriter sw = new StreamWriter(responseMemoryStream);
                sw.Write(httpResponse.ToString());
                sw.Flush();


                bool isSessionIDContained = httpResponse.Headers.Contains("bs-session-id");

                if (isSessionIDContained == true)
                {
                    IEnumerable<string> sessionEnum = httpResponse.Headers.GetValues("bs-session-id");
                    foreach (string element in sessionEnum)
                    {
                        Console.WriteLine("bs-session-id: " + element);
                        string[] strCookieArr = element.Split(new string[] { "bs-session-id=" }, StringSplitOptions.None);
                        //string[] strCookieArr2 = strCookieArr[1].Split(new string[] { ";" }, StringSplitOptions.None);
                        sessionID = strCookieArr[0];
                    }
                }
                else if (isSessionIDContained != false)
                {
                    Console.WriteLine("Session ID not found");
                }
            }          
            else
            {
                Console.WriteLine("Failed to log in");
                Console.WriteLine(httpResponse.ToString());
            }            
        }