BioStar 2 v2.7.10 以降のバージョンでBioStar 2 New Local APIをご利用いただけます。[BioStar 2 API] BioStar 2.7.10のNew Local API


この記事では、C# またはスタンドアロンの Windows アプリケーションに慣れている方のために作成したサンプル アプリケーションを紹介します。BioStar 2 New Local APIは RESTful API であるため、RESTful API に慣れていない方は、BioStar 2 New Local API を使用して独自のアプリケーションを実装するのが難しい場合があります。 そのため、この記事のサンプル アプリケーションで開発が開始できるようにガイドします。


ステップ 1: HTTPS証明書発行

1) BioStar 2に接続すると、保護されていない通信と表示する場合は、Https証明書の発行が必要です。

HTTPおよびHTTPSプロトコルの構成

[BioStar 2ページ]



ステップ 2: 以下の例を参照してください

このサンプル アプリケーションは Visual C# コンソール アプリケーションであり、基本的な機能であるログインが含まれています。

サンプルコード[BioStar2 New Local API_Web API Test_ONLY LOGIN API_v2.zip]


BioStar 2 は HTTPS を使用するため、以下のようなコードをソース コードに追加する必要があります。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;  System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };  
C


上記のコードがないと、以下のエラー コードが表示される場合があります。

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


StackOverflowから検索してから、HTTPSの信頼できる証明書に関する行を追加することをお勧めします。


(例: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());
            }            
        }
C