خدمة الملفات الديناميكية باستخدام Blazor في ASP.NET

واحدة من الميزات الرائعة العديدة لأطر العمل مثل بليزر وASP.NET (الذي يعمل عليه) هو القدرة على تقديم محتوى ديناميكي عند أي نقطة نهاية يحتاجها تطبيقك. إذا كنت ترغب في تقديم تنزيلات للملفات التي تم إنشاؤها، فمن السهل القيام بذلك من خلال القليل من التكوين.




لماذا تخدم الملفات الديناميكية؟

في الأساس، لديك خياران كخادم ويب: الرد على طلب بمحتوى ثابت، مثل صفحة HTML أو ملف JPG، أو إنشاء استجابة مخصصة لإرسالها إلى المستخدم. بليزر يعمل على ASP.NET، وبالتالي فإن خادم HTTP المدمج يدعم مجموعة واسعة من الخيارات ويسمح بمرونة كبيرة.

على سبيل المثال، ربما تريد استضافة ملف JSON على

/images/pathname.json 

. لا يجب أن يكون هذا ملفًا حرفيًا على القرص؛ يمكن للخادم تفسير هذا الطلب والرد بأي نوع من المحتوى، بما في ذلك شيء غير متوقع مثل ملف PNG. يمكنك الرد على هذا الطلب عن طريق جلب بعض النتائج من واجهة برمجة التطبيقات (API)، وإنشاء استجابة، وإرسال السلسلة مرة أخرى إلى المستخدم.

أو ربما ترغب في إنشاء الملف الفعلي بسرعة. على سبيل المثال، هناك العديد من مكتبات الرسومات المستخدمة لرسم صور مخصصة. يمكنك استخدام واحدة منها لإنشاء صورة والاستجابة لطلب المستخدم بالبيانات، وكلها في الذاكرة.


في الحالة الأخيرة، قد يكون من المنطقي تخزين الاستجابة مؤقتًا عن طريق حفظها على القرص والرد بملف حقيقي في معظم الأوقات. يمكن أن يكون هذا مفيدًا لأجيال الملفات كثيفة الاستخدام للموارد والتي لا تتغير كثيرًا.

إعداده

يعد تقديم مثل هذه الملفات أمرًا مضمنًا وسهل التنفيذ. سوف تحتاج إلى إنشاء صفحة Razor جديدة، وهذا ما بليزر يعمل على. يمكنك القيام بذلك عن طريق النقر بزر الماوس الأيمن في Visual Studio وتحديد Add > Razor Page.

/wordpress/wp-content/uploads/csit/2021/06/c74e70df.png

يؤدي القيام بذلك إلى إنشاء ملفين مرتبطين ببعضهما البعض في التسلسل الهرمي:

Name.cshtml 

، الذي يتعامل مع جانب HTML للأشياء، و

Name.cshtml.cs 

، الذي يتعامل مع النموذج والكود الفعلي. نظرًا لأن هذه لن تكون صفحة ويب فعلية، بل مجرد ملف، فيمكنك تجاهل الصفحة الأولى في أغلب الأحيان.


ومع ذلك، سوف تحتاج إلى تعيين

@page 

السمة لمطابقة المكان الذي تريد استضافة هذا الملف فيه. ربما تريد تضمين بعض أحرف البدل، والتي تفعلها باستخدام الأقواس.

/wordpress/wp-content/uploads/csit/2021/06/775cfcb3.png

في

Name.cshtml.cs 

الملف، سترى بعض التعليمات البرمجية الفعلية الممتدة

PageModel 

. الوظيفة الرئيسية هنا هي

OnGet() 

، والذي ربما تريد التغيير إليه OnGetAsync() إذا كنت تقوم بأي معالجة غير متزامنة.

/wordpress/wp-content/uploads/csit/2021/06/3194c7a4.png


لديك ثلاثة خيارات رئيسية من هذه الوظيفة. أولاً، يتم إرجاع ملف PhysicalFile، الذي يقرأ حرفيًا الملف الموجود على القرص المحدد بمسار، ويرسله إلى المستخدم بنوع، اختياريًا باسم تنزيل منفصل عن المسار الفعلي.

على الرغم من أنك هنا على الأرجح لإنشاء شيء ما ديناميكيًا، إلا أن هذا قد يكون مفيدًا جدًا للتخزين المؤقت. إذا كانت لديك وظيفة المعالجة الخاصة بك لحفظ النتيجة في ملف، فيمكنك التحقق من وجود هذا الملف قبل معالجته مرة أخرى، وإذا كان موجودًا، فما عليك سوى إرجاع الاستجابة المخزنة مؤقتًا.

/wordpress/wp-content/uploads/csit/2021/06/d0af0dbc.png

الخيار التالي هو إرجاع ملف افتراضي، مع إعطاء مصفوفة بايت. هذا هو ما تريد استخدامه في معظم التطبيقات، لأنه يعمل بالكامل في الذاكرة وينبغي أن يكون سريعًا جدًا.


اعتمادًا على التشفير الذي تحاول استخدامه، قد ترغب في تحويل سلسلة إلى مصفوفة بايت باستخدام التابع

Encoding 

فئة مساعد.

Encoding.UTF8.GetBytes(string);

/wordpress/wp-content/uploads/csit/2021/06/93db0661.png

وأخيرًا، يمكنك إرجاع سلسلة محتوى مباشرة، وهو ما يجب عليك استخدامه إذا كنت تريد عرض المحتوى للمستخدم بدلاً من تشغيل التنزيل في متصفحه.

/wordpress/wp-content/uploads/csit/2021/06/1c5e735a.png

هناك خيارات أخرى غير هذه الثلاثة، لكن الباقي يتضمن الرد باستخدام رموز الحالة، وإعادة التوجيه، والاستجابات غير المصرح بها، وعرض الصفحة نفسها.


خدمة الملفات بناءً على المسارات والمعلمات

بالطبع، لا شيء من هذا مفيد إذا لم تتمكن من الاستجابة للطلبات بناءً على مدخلات المستخدم. يوجد كلا النموذجين من الإدخال في عنوان URL: معلمات التوجيه ومعلمات عنوان URL. معلمات التوجيه هي ما حددته باستخدام أحرف البدل في الصفحة نفسها، وهي المسار الفعلي للملف. معلمات URL اختيارية.

يمكن أن يكون اكتشاف ذلك أمرًا مؤلمًا بعض الشيء، ولكن لحسن الحظ لديك مصحح أخطاء بجانبك، حتى تتمكن من تعيين نقطة توقف في OnGetAsync() وعرض شجرة المتغيرات المحلية بأكملها.

/wordpress/wp-content/uploads/csit/2021/06/8980c604.png

ستجد، تحت this.PageContext.RouteData، هناك RouteValueDictionary الذي يخزن جميع الطرق. لاحظ أن هذا يتضمن مسار الصفحة نفسه، لذلك إذا استخدمته /Download/{param} كمسار، ستكون المعلمة هي الخيار الثاني.


أفضل طريقة لجلب المعلمات هي البحث عنها بواسطة المفتاح:

/wordpress/wp-content/uploads/csit/2021/06/f6430fe4.png

وبالمثل، تتوفر أيضًا معلمات الاستعلام، ولكن من كائن مختلف. سوف تحتاج إلى الوصول HttpContext.Request.Query، وهو أ QueryValueDictionary يحتوي على معلمات URL، ويعمل بنفس طريقة المسار الأول.

/wordpress/wp-content/uploads/csit/2021/06/919529d8.png


أنت بعد ذلك حر في استخدام هذه المعلمات لإجراء عمليات البحث أو التأثير على المنطق. ومع ذلك، إذا كنت تقوم بتخزين الاستجابات مؤقتًا، فستحتاج إلى التأكد من أن ظروف ذاكرة التخزين المؤقت وعمليات البحث الخاصة بك تتأثر بهذه المعلمات أيضًا، وإلا فقد تواجه مشكلات تتعلق بسلوكيات التخزين المؤقت غير المتوقعة.

(علامات للترجمة) البرمجة (ر) Microsoft

أضف تعليق