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 that you have configured on BioStar Setting,( by default https port used is 443).
[Figure 4. BioStar 2 Server Setting]
[Figure 5. BioStar 2 HTTPS Certificate Program
Enter BioStar 2 Server IP address with the port (in the example port used is456)]
[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()); } }