مدیریت مسیر پایه (Base Path) در برنامههای Blazor: از چالشهای استقرار تا راهکار داتنت ۱۱
نویسنده: وحید نصیری
تاریخ: ۱۴۰۵/۰۳/۲۹ ۱۰:۱۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
base href است. برنامههای تکصفحهای (SPA) برای مسیریابی صحیح (Routing) در سمت کاربر و همچنین یافتن منابع استاتیک خود (مانند فایلهای CSS، جاوااسکریپت و DLLها) به این مسیر وابستهاند. در این مقاله، ابتدا به بررسی چالشهای رایج تنظیم مسیر پایه در برنامههای Blazor میپردازیم، راهکارهای سنتی آن را بررسی میکنیم و در نهایت میبینیم که چگونه داتنت ۱۱ (NET 11.) با یک راهکار بومی و ظریف، این دغدغه را برای توسعهدهندگان برطرف کرده است.index.html (یا App.razor در نسخههای جدیدتر) شامل تگ زیر در بخش است:<base href="/" />
blazor مستقر کنید؛ به طوری که برنامه از طریق آدرس http://example.com/blazor در دسترس باشد.base href ایجاد نکنید، پس از ورود به لینک، تنها صفحه در حال بارگذاری (Loading) را مشاهده خواهید کرد و برنامه متوقف میشود._framework/blazor.webassembly.js) را از ریشه سرور (یعنی http://example.com/_framework/...) دانلود کند، در حالی که این فایلها اکنون در زیرپوشه blazor قرار دارند.href را به صورت زیر تغییر دهیم:<base href="/blazor/" />
base شاید ساده به نظر برسد، اما یک چالش پنهان دارد: حساسیت به بزرگی و کوچکی حروف.http://example.com/Blazor)، Blazor در زمان مسیریابی دچار سردرگمی شده و با خطای زیر در کنسول مرورگر مواجه میشوید:System.ArgumentException: The URI is not contained by the base URIbase را به صورت پویا (Dynamic) و با استفاده از جاوااسکریپت تنظیم میکردند. در این روش، قطعه کد زیر پیش از اسکریپت اصلی Blazor قرار میگرفت تا مسیر پایه را بر اساس آدرسی که کاربر وارد کرده است، استخراج و مقداردهی کند:<script>
// استخراج بخش اول مسیر از URL فعلی کاربر
var path = window.location.pathname.split('/');
var baseTag = document.getElementsByTagName('base');
// تنظیم پویای مسیر پایه
baseTag[0].setAttribute('href', '/' + path[1] + '/');
</script>BasePathNavigationManager.BaseUri پردازش و رندر میکند. برای استفاده از آن، کافی است تگ استاتیک را حذف کرده و از این کامپوننت استفاده کنید:@using Microsoft.AspNetCore.Components.Endpoints
<!DOCTYPE html>
<html>
<head>
<BasePath />
<link rel="stylesheet" href="css/app.css" />
</head>
<body>
@RenderBody()
</body>
</html>/dashboard یا /app مستقر شود، این کامپوننت بدون هیچ دردسری مسیر صحیح را تشخیص میدهد. همچنین در صورتی که نتواند مسیر را تجزیه و تحلیل کند، به عنوان یک راهکار پشتیبان (Fallback)، همان مسیر ریشه (/) را برمیگرداند. بدین ترتیب، مشکل حساسیت به حروف (Case Sensitivity) نیز در سمت سرور به زیبایی مدیریت میشود.<base href="/" />
<BasePath /> را رندر کرده و مقدار آن را محاسبه کند.<BasePath /> نشان داد که تیم توسعهی داتنت به بازخورد برنامهنویسان توجه ویژهای دارد. اکنون توسعهدهندگان میتوانند بدون نگرانی از خطاهای مسیریابی و با کدی بسیار تمیزتر، برنامههای خود را در هر آدرس و زیرپوشهای مستقر کنند. با این حال، درک تفاوت ساختاری بین برنامههای Server-Rendered و Standalone WASM برای انتخاب رویکرد درست، همچنان الزامی است.