استخدم Blazor لتوفير ملفات ديناميكية في ASP.Internet – CloudSavvy IT
إحدى الميزات العديدة المهمة لأطر العمل مثل Blazor و ASP.Internet (التي يتم تشغيلها عليها) هي القدرة على توفير محتوى ديناميكي في أي نقطة نهاية يحتاجها تطبيقك. إذا كنت ترغب في توفير تنزيل الملف الذي تم إنشاؤه ، فيمكنك إكماله بسهولة بقليل من التكوين.
لماذا نوفر ملفات ديناميكية؟
بشكل أساسي ، كخادم ويب ، لديك خياران: الاستجابة للطلبات بمحتوى ثابت (مثل صفحات HTML أو ملفات JPG) ، أو إنشاء استجابات مخصصة لإرسالها إلى المستخدمين. يعمل Blazor على ASP.Internet ، لذلك يدعم خادم HTTP المدمج مجموعة واسعة من الخيارات ويوفر مرونة كبيرة.
على سبيل المثال ، ربما تريد استضافة ملف JSON بتنسيق /visuals/pathname.json
لا يجب أن يكون هذا ملفًا نصيًا على القرص ؛ يمكن للخادم تفسير الطلب والاستجابة لأي نوع من المحتوى ، بما في ذلك المحتوى غير المتوقع مثل ملفات PNG. يمكنك الرد على هذا الطلب من خلال الحصول على بعض النتائج من واجهة برمجة التطبيقات ، وإنشاء استجابة ، وإرسال سلسلة إلى المستخدم مرة أخرى.
أو ، قد ترغب في إنشاء ملفات فعلية على الطاير. على سبيل المثال ، هناك العديد من مكتبات الرسومات لرسم صور مخصصة. يمكنك استخدام إحداها لإنشاء الصور واستخدام البيانات للرد على طلبات المستخدم ، وكلها في الذاكرة.
في الحالة الأخيرة ، قد يكون من المنطقي تخزين الاستجابة مؤقتًا عن طريق حفظها على القرص والرد بملف حقيقي في معظم الأوقات. هذا مفيد لإنشاء ملف كثيف الموارد لا يتغير بشكل متكرر.
إعداده
توفير مثل هذه الملفات مضمّن وبسيط للغاية. تحتاج إلى إنشاء صفحة Razor جديدة ، وهي الصفحة التي يعمل عليها Blazor. يمكنك القيام بذلك عن طريق النقر بزر الماوس الأيمن في Visible Studio وتحديد Add> Razor Site.
سيؤدي القيام بذلك إلى إنشاء ملفين مرتبطين ببعضهما البعض في تسلسل هرمي: Title.cshtml
، فهو يتعامل مع جانب HTML للأشياء ، و Name.cshtml.cs
، يتعامل مع النموذج والرمز الفعلي. نظرًا لأن هذه لن تكون صفحة ويب فعلية ، بل مجرد ملف ، يمكنك تجاهل الصفحة الأولى إلى حد كبير.
ومع ذلك ، تحتاج إلى ضبط @webpage
سمة تتطابق مع الموقع الذي تريد استضافة هذا الملف فيه. قد ترغب في تضمين بعض أحرف البدل ، يمكنك استخدام الأقواس المربعة لتحقيق ذلك.
داخل Identify.cshtml.cs
ملف وسترى بعض امتدادات التعليمات البرمجية الفعلية PageModel
الوظيفة الرئيسية هنا هي OnGet()
، قد ترغب في التغيير إلى OnGetAsync()
إذا كنت تقوم بأي معالجة غير متزامنة.
يمكنك الحصول على ثلاثة خيارات رئيسية من هذه الميزة. أولاً ، قم بإرجاع ملف فعلي ، والذي يقرأ حرفياً الملف الموجود على قرص المسار المحدد ويرسله إلى نوع المستخدم ، مع خيار استخدام اسم تنزيل منفصل يختلف عن المسار الفعلي.
على الرغم من أنه يمكنك إنشاء بعض المحتوى ديناميكيًا هنا ، إلا أن هذا مفيد جدًا للتخزين المؤقت. إذا سمحت لوظيفة المعالجة بحفظ النتيجة في ملف ، يمكنك التحقق مما إذا كان الملف موجودًا قبل المعالجة مرة أخرى ، وإذا كان موجودًا ، فما عليك سوى إرجاع الاستجابة المخزنة مؤقتًا.
الخيار التالي هو إرجاع ملف افتراضي ، مع إعطاء مصفوفة بايت. هذا ما تريد استخدامه لمعظم التطبيقات لأنه يعمل بالكامل في الذاكرة ويجب أن يكون سريعًا جدًا.
اعتمادًا على الترميز الذي تحاول استخدامه ، قد ترغب في استخدامه Encoding
فئة المساعد.
Encoding.UTF8.GetBytes(string)
أخيرًا ، يمكنك إرجاع سلسلة المحتوى مباشرةً ، والتي يجب استخدامها إذا كنت تريد عرض المحتوى للمستخدمين بدلاً من تشغيل التنزيل في المستعرض الخاص بهم.
بالإضافة إلى هذه الخيارات الثلاثة ، هناك خيارات أخرى ، لكن الخيارات المتبقية تتضمن الرد على أكواد الحالة ، وعمليات إعادة التوجيه ، والاستجابات غير المصرح بها ، وعرض الصفحة نفسها.
توفير الملفات على أساس التوجيه والمعلمات
بالطبع ، إذا لم تتمكن من الاستجابة للطلبات بناءً على مدخلات المستخدم ، فلن يكون أي منها مفيدًا. يوجد شكلين من أشكال الإدخال في عنوان URL: معلمات التوجيه ومعلمات URL. معلمة التوجيه هي ما تحدده باستخدام أحرف البدل في الصفحة نفسها ، وهي المسار الفعلي للملف. معلمات URL اختيارية.
قد يكون من الصعب بعض الشيء اكتشاف ذلك ، لكن لحسن الحظ ، لديك مصحح أخطاء بجانبك ، لذا يمكنك OnGetAsync()
وعرض شجرة المتغيرات المحلية بأكملها.
ستجد ذلك في this.PageContext.RouteData
، هناك RouteValueDictionary
قم بتخزين جميع الطرق.لاحظ أن هذا يتضمن توجيه الصفحة نفسه ، لذلك إذا كنت تستخدم /Download/param
كطريق ، ستكون المعلمة هي الخيار الثاني.
أفضل طريقة للحصول على المعلمات هي البحث بالمفتاح:
وبالمثل ، تتوفر أيضًا معلمات الاستعلام ، ولكن من كائنات مختلفة.أنت بحاجة إلى زيارة HttpContext.Request.Query
،هذا QueryValueDictionary
يحتوي على معلمات URL ويعمل بنفس طريقة التوجيه تقريبًا.
إذن فأنت حر في استخدام هذه المعلمات لإجراء البحث أو التأثير في المنطق. ومع ذلك ، إذا كنت تقوم بتخزين الاستجابات مؤقتًا ، فستحتاج إلى التأكد من أن ظروف التخزين المؤقت وعمليات البحث الخاصة بك تتأثر أيضًا بهذه المعلمات ، وإلا فقد تواجه سلوك تخزين مؤقت غير متوقع.