در این مقاله قصد داریم نحوه دسترسی به داده های ذخیره سازی جدول Azure با استفاده از Rest API در هسته ASP.NET را ببینیم. هسته ASP.NET یک چارچوب وب منبع باز توسط مایکروسافت است که می تواند بر روی مک، ویندوز و لینوکس اجرا شود. Azure Tables یک پایگاه داده ابری NoSQL است و یک پایگاه داده رابطه ای نیست. فقط بدون هیچ نوع رابطه دیگری مانند کلیدهای خارجی می تواند ذخیره کند.
پيش نياز
قبل از شروع به استفاده از برنامه ASP.NET Core، موارد زیر باید در سیستم شما نصب شوند.
- NET Core SDK
- محیط توسعه یکپارچه (IDE)
ایجاد ASP.NET Core Application
در اینجا نحوه ایجاد برنامه .NET core 2.1 را خواهیم دید و از Visual Studio 2017 برای ایجاد یک برنامه ASP.NET Core 2.1 استفاده خواهیم کرد.
- Visual Studio را باز کنید، روی File -> New Project کلیک کنید.
- در کادر محاوره ای New Project Visual C# را باز کرده و روی Web template کلیک کنید. ASP.NET Core Web Application را انتخاب کنید.
- یک نام مناسب، نام راه حل، مکان و OK را کلیک کنید.
- سپس، پاپ آپ دیگر مانند زیر باز می شود، ASP.NET Core 2.1 و Web Application (Model-View-Controller) را انتخاب کنید.
- برای ایجاد یک ASP.NET Core Web Application مانند شکل زیر روی OK کلیک کنید.
نام حساب Access Key & Storage را از Azure Portal دریافت کنید
اکنون، HomeController.cs را باز کرده و کد زیر را تایپ کنید.
- using System;
- using System.Net;
- using System.Security.Cryptography;
- using System.Text;
-
- namespace DemoAzureTableRest.Helpers
- {
- public class AzureTables
- {
- public static int GetAllEntity(string storageAccount, string accessKey, string resourcePath, out string jsonData)
- {
- string uri = @"https://" + storageAccount + ".table.core.windows.net/" + resourcePath;
-
-
- HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
-
- int query = resourcePath.IndexOf("?");
- if (query > 0)
- {
- resourcePath = resourcePath.Substring(0, query);
- }
-
- request = getRequestHeaders("GET", request, storageAccount, accessKey, resourcePath);
-
-
- try
- {
- using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
- {
- using (System.IO.StreamReader r = new System.IO.StreamReader(response.GetResponseStream()))
- {
- jsonData = r.ReadToEnd();
- return (int)response.StatusCode;
- }
- }
- }
- catch (WebException ex)
- {
-
- using (System.IO.StreamReader sr = new System.IO.StreamReader(ex.Response.GetResponseStream()))
- {
- jsonData = sr.ReadToEnd();
-
- }
-
- return (int)ex.Status;
- }
- }
-
-
- public static HttpWebRequest getRequestHeaders(string requestType, HttpWebRequest Newrequest, string storageAccount, string accessKey, string resource, int Length = 0)
- {
- HttpWebRequest request = Newrequest;
-
- switch (requestType.ToUpper())
- {
- case "GET":
- request.Method = "GET";
- request.ContentType = "application/json";
- request.ContentLength = Length;
- request.Accept = "application/json;odata=nometadata";
- request.Headers.Add("x-ms-date", DateTime.UtcNow.ToString("R", System.Globalization.CultureInfo.InvariantCulture));
- request.Headers.Add("x-ms-version", "2015-04-05");
- request.Headers.Add("Accept-Charset", "UTF-8");
- request.Headers.Add("MaxDataServiceVersion", "3.0;NetFx");
- request.Headers.Add("DataServiceVersion", "1.0;NetFx");
- break;
-
- }
-
- string sAuthorization = getAuthToken(request, storageAccount, accessKey, resource);
- request.Headers.Add("Authorization", sAuthorization);
- return request;
- }
-
-
- public static string getAuthToken(HttpWebRequest request, string storageAccount, string accessKey, string resource)
- {
- try
- {
- string sAuthTokn = "";
-
- string stringToSign = request.Headers["x-ms-date"] + "\n";
-
- stringToSign += "/" + storageAccount + "/" + resource;
-
- HMACSHA256 hasher = new HMACSHA256(Convert.FromBase64String(accessKey));
-
- sAuthTokn = "SharedKeyLite " + storageAccount + ":" + Convert.ToBase64String(hasher.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
-
- return sAuthTokn;
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- }
- }
سپس، نام کلاس مدل به نام فایل MaterialUsage.cs را ایجاد کنید.
- using System;
- using System.Collections.Generic;
-
- namespace DemoAzureTableRest.Models
- {
- public class MaterialUsage
- {
- public List<MaterialUsageDetails> Value { get; set; }
- }
-
- public class MaterialUsageDetails
- {
- public string PartitionKey { get; set; }
- public string RowKey { get; set; }
- public DateTime Timestamp { get; set; }
- public string deviceId { get; set; }
- public string messageId { get; set; }
- public string furnace { get; set; }
- public string material { get; set; }
- public DateTime time { get; set; }
- public float weight { get; set; }
- public DateTime DateTime { get; set; }
-
- }
- }
سپس Index.cshtml را باز کنید و کد زیر را تایپ کنید.
- @{
- ViewData["Title"] = "Home Page";
- }
-
- @model DemoAzureTableRest.Models.MaterialUsage
-
- <div class="row">
- <div class="col-md-12">
- <h2>Azure Tables</h2>
- <table class="table table-striped">
- <thead>
- <tr>
- <th>Device Id</th>
- <th>Furnace Name</th>
- <th>Material Name</th>
- <th>Weight</th>
- <th>Time</th>
- </tr>
- </thead>
- <tbody>
- @if (Model.Value != null)
- {
- foreach (var item in Model.Value)
- {
- <tr>
- <td>@item.deviceId</td>
- <td>@item.furnace</td>
- <td>@item.material</td>
- <td>@item.weight</td>
- <td>@item.Timestamp</td>
- </tr>
- }
- }
- else
- {
- <tr>
- <td>No Data</td>
- </tr>
- }
- </tbody>
- </table>
- </div>
- </div>
خودشه. اکنون برنامه وب را اجرا کنید، به منوی Debug بروید و روی Start without Debugging کلیک کنید یا F5 را فشار دهید. با این کار مرورگر باز می شود و نتیجه زیر نمایش داده می شود.
امیدوارم نحوه دسترسی به داده ها از ذخیره سازی جدول Azure با استفاده از Rest API در یک برنامه وب اصلی ASP.NET را یاد گرفته باشید. در صورت نیاز به کمک، می توانید کادر نظر زیر را پر کنید.