۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

۶ تکنیک مدیریت حالت برای ASP.NET Core MVC

شما چندین راه مختلف برای ذخیره و بازیابی داده ها بین درخواست ها در برنامه های ASP.NET Core MVC دارید. در اینجا نحوه استفاده از آنها آورده شده است.

شما چندین راه مختلف برای ذخیره و بازیابی داده ها بین درخواست ها در برنامه های ASP.NET Core MVC دارید. در اینجا نحوه استفاده از آنها آورده شده است.

از آنجایی که HTTP یک پروتکل بدون حالت است، اطلاعات وضعیت بین درخواست ها حفظ نمی شود. این بدان معنی است که شما باید منطق خود را برای حفظ وضعیت بنویسید یا راه دیگری برای حفظ اطلاعات وضعیت پیدا کنید.

این مقاله برخی از رایج‌ترین تکنیک‌های مدیریت حالت موجود در ASP.NET Core MVC و نحوه استفاده از آنها در برنامه‌های ASP.NET Core MVC را بررسی می‌کند.

برای کار با نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخه‌ای ندارید، می‌توانید پیش‌نمایش Visual Studio 2022 را از اینجا بارگیری کنید.< /p>

یک پروژه ASP.NET Core MVC در Visual Studio 2022 ایجاد کنید

ابتدا، اجازه دهید یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد کنیم. با دنبال کردن این مراحل، یک پروژه ASP.NET Core Web API در Visual Studio 2022 ایجاد می‌شود:

  1. Visual Studio 2022 Preview IDE را راه اندازی کنید.
  2. روی “ایجاد پروژه جدید” کلیک کنید.
  3. در پنجره “ایجاد پروژه جدید”، “ASP.NET Core Web App” را از لیست الگوهای نمایش داده شده انتخاب کنید.
  4. بعدی را کلیک کنید.
  5. در پنجره “پیکربندی پروژه جدید خود”، نام و مکان پروژه جدید را مشخص کنید.
  6. به صورت اختیاری، بسته به تنظیمات برگزیده خود، کادر انتخاب «قرار دادن راه حل و پروژه در یک فهرست راهنمای» را علامت بزنید.
  7. بعدی را کلیک کنید.
  8. در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، در زیر Framework، .NET 7.0 را انتخاب کنید.
  9. چون در این مثال از کنترل‌کننده‌ها استفاده می‌کنیم، کادری که می‌گوید «استفاده از کنترل‌کننده‌ها…» را علامت نزنید، بگذارید. تنظیم «نوع احراز هویت» را روی «هیچ» (پیش‌فرض) بگذارید.
  10. مطمئن شوید که چک باکس‌های «Enable Docker»، «Configure for HTTPS» و «Enable Open API Support» علامت نخورده باشند زیرا ما در اینجا از هیچ یک از این ویژگی‌ها استفاده نخواهیم کرد.
  11. روی ایجاد کلیک کنید.

ما از این پروژه ASP.NET Core 7 Web API برای نشان دادن تکنیک‌های مدیریت وضعیت در بخش‌های بعدی این مقاله استفاده خواهیم کرد.

درک مدیریت دولتی

ASP.NET Core MVC مجموعه‌ای غنی از ویژگی‌ها را برای ساخت برنامه‌های کاربردی وب مدرن ارائه می‌کند، و از جمله پشتیبانی از تعدادی روش برای مدیریت وضعیت است. مدیریت حالت تکنیک حفظ وضعیت یک برنامه در طول زمان است، به عنوان مثال، در طول مدت یک جلسه کاربر یا در تمام درخواست‌ها و پاسخ‌های HTTP که جلسه را تشکیل می‌دهند. بنابراین یکی از مهم ترین دغدغه های بین بخشی هر برنامه وب است.

برنامه نویسی واکنشی با RxJava

به عبارت دیگر، مدیریت حالت نحوه پیگیری داده‌هایی است که به داخل و خارج از برنامه خود وارد می‌شوند و چگونه اطمینان می‌یابید که در صورت نیاز در دسترس هستند. مدیریت ایالت با این امکان را به کاربر می دهد که بدون وارد کردن مجدد اطلاعات خود، از جایی که کار را متوقف کرده است، تجربه کاربری نرم تری داشته باشد. بدون مدیریت دولتی، کاربران باید هر بار که یک صفحه جدید را بازدید یا بارگذاری مجدد می‌کنند، اطلاعات خود را وارد کنند.

در یک برنامه ASP.NET Core MVC می توانید وضعیت را به روش های مختلفی مدیریت کنید. ما شش روش برای مدیریت وضعیت را در بخش‌های زیر بررسی می‌کنیم: کوکی‌ها، وضعیت جلسه، فیلدهای پنهان، ویژگی TempData، رشته‌های پرس و جو و ذخیره‌سازی حافظه پنهان.

از کوکی ها برای حفظ وضعیت در ASP.NET Core MVC

استفاده کنید

کوکی بخشی از داده است که در رایانه کاربر قرار دارد و به شناسایی کاربر کمک می کند. در اکثر مرورگرهای وب، هر کوکی در یک فایل جداگانه ذخیره می شود (به استثنای فایرفاکس است که همه کوکی ها را در یک فایل ذخیره می کند). کوکی ها به صورت جفت کلید-مقدار نمایش داده می شوند و از کلیدها می توان برای خواندن، نوشتن یا حذف کوکی ها استفاده کرد. ASP.NET Core MVC از کوکی ها برای حفظ وضعیت جلسه استفاده می کند. کوکی با شناسه جلسه به مشتری منتقل می شود.

می توانید از قطعه کد ارائه شده در زیر برای نوشتن داده ها در یک کوکی استفاده کنید.

CookieOptions options = new CookieOptions();
options.Expires = DateTime.Now.AddSeconds(10);

از Session State برای حفظ حالت در ASP.NET Core MVC استفاده کنید

Session State مکانیزمی برای ذخیره داده های کاربر در سمت سرور در یک برنامه وب ASP.NET Core MVC است. مرورگر کاربر هر بار که کاربر از یک وب سایت بازدید می کند، درخواستی حاوی اطلاعات مربوط به جلسه کاربر را به سرور ارسال می کند. سپس سرور یک جلسه جدید ایجاد می کند و داده های کاربر را در آن جلسه ذخیره می کند.

ذخیره سازی داده برای جاوا اسکریپت جلویی

جلسه کاربر و تمام داده‌های کاربر هنگام خروج از وب‌سایت از بین می‌رود. Session State برای ذخیره مقادیر کمی داده که باید در چندین درخواست از یک کاربر باقی بماند مفید است. برای مثال، ممکن است از وضعیت جلسه برای ذخیره اقلام یا تنظیمات برگزیده سبد خرید کاربر استفاده کنید.

قطعه کد زیر نشان می‌دهد که چگونه می‌توانید یک جفت کلید-مقدار را در حالت جلسه در یک روش اقدام ذخیره کنید.

public IActionResult Index()
{
   HttpContext.Session.SetString("MyKey", "MyValue");
   return View();
}

از فیلدهای مخفی برای حفظ وضعیت در ASP.NET Core MVC استفاده کنید

هنگام کار بر روی برنامه‌های ASP.NET Core MVC، ممکن است به جای ارائه داده‌ها در صفحه، نیاز به حفظ داده‌ها در سمت سرویس گیرنده داشته باشیم. به عنوان مثال، ممکن است لازم باشد زمانی که کاربر اقدام خاصی را انجام می دهد، بدون نمایش داده ها در رابط کاربری، داده ها را به سرور ارسال کنیم. این یک مشکل معمولی در بسیاری از برنامه‌ها است و فیلدهای پنهان راه‌حلی عالی ارائه می‌دهند. ما می توانیم اطلاعات را در فیلدهای فرم مخفی ذخیره کرده و در درخواست زیر آن را برگردانیم.

قطعه کد زیر نشان می دهد که چگونه می توانید شناسه کاربری یک کاربر وارد شده را ذخیره کنید و مقدار ۱ را اختصاص دهید.

@Html.HiddenFor(x => x.UserId, new { Value = "1" })

از TempData برای حفظ حالت در ASP.NET Core MVC استفاده کنید

می توانید از ویژگی TempData در ASP.NET Core برای ذخیره داده ها استفاده کنید تا زمانی که برنامه شما آن را بخواند. ما می توانیم داده ها را بدون حذف با استفاده از توابع Keep() و Peek() بررسی کنیم. TempData زمانی بسیار مفید است که به داده‌هایی نیاز داریم که به بیش از یک درخواست تعلق دارند. ما می توانیم با استفاده از کنترلرها و نماها به آنها دسترسی پیدا کنیم.

TempData برای انتقال داده ها از یک درخواست به درخواست دیگر، یعنی برای تغییر مسیر داده ها از یک صفحه به صفحه دیگر استفاده می شود. عمر حداقلی دارد و فقط تا زمانی وجود دارد که نمای هدف کاملاً بارگذاری شود. با این حال، می توانید با استفاده از تابع Keep() داده ها را در TempData ذخیره کنید. TempData فقط در طول جلسه کاربر قابل دسترسی است. تا زمانی که آن را بخوانیم باقی می ماند و بعد از یک درخواست HTTP پاک می شود.

MSTest runner تست های MSTest را اجرا می کند

قطعه کد زیر نحوه استفاده از TempData را در کنترلر ASP.NET Core MVC خود نشان می دهد.

public class CustomerController : Controller
{
    public IActionResult TempDataDemo()
    {
        var customerId = TempData["CustomerId"] ?? null;       
        return View();
    }
}

از رشته های کوئری برای حفظ حالت در ASP.NET Core MVC استفاده کنید

می توانید از رشته های پرس و جو برای انتقال مقدار کمی داده از یک درخواست به درخواست دیگر استفاده کنید. توجه داشته باشید که چون رشته های پرس و جو به صورت عمومی در معرض دید قرار می گیرند، هرگز نباید از آنها برای ارسال داده های حساس استفاده کنید. علاوه بر این، استفاده از رشته‌های جستجو می‌تواند برنامه شما را در برابر جعل درخواست‌های بین‌سایتی آسیب‌پذیر کند (CSRF).

قطعه کد زیر نحوه استفاده از رشته های پرس و جو را در ASP.NET Core MVC نشان می دهد.

http://localhost:5655/api/customer?region=abc

و، قطعه کد زیر نشان می دهد که چگونه می توانید داده های رشته پرس و جو را در روش اقدام خود بخوانید.

string region = HttpContext.Request.Query["region"].ToString();

از کش برای حفظ وضعیت در ASP.NET Core MVC

استفاده کنید

Cach کردن روش دیگری برای ذخیره اطلاعات وضعیت بین درخواست‌ها است. شما می توانید از یک کش برای ذخیره داده های قدیمی استفاده کنید، به عنوان مثال، داده هایی که به ندرت در برنامه شما تغییر می کنند. ASP.NET Core MVC از سه نوع مختلف کش پشتیبانی می کند، یعنی کش در حافظه، کش توزیع شده، و کش پاسخ. قطعه کد زیر نشان می دهد که چگونه می توانید کش در حافظه را در برنامه های ASP.NET Core MVC خود روشن کنید.

builder.Services.AddMemoryCache();

اگر می‌خواهید نمونه‌هایی از انواع پیچیده را در حالت جلسه ذخیره و بازیابی کنید، می‌توانید داده‌های خود را در صورت لزوم سریال‌سازی یا غیر سریالی کنید. و اگر می‌خواهید داده‌ها را از کنترلر خود به نما ارسال کنید، می‌توانید از ViewData استفاده کنید.