IMustafa Zeynali
IMustafa Zeynali
خواندن ۲ دقیقه·۱ سال پیش

پابلیش پروژه spa داخل پروژه asp.net core


سلام دوستان.

توی یه پروژه یه مشکلی برام پیش اومد خواستم باهاتون به اشتراک بذارم تا بدرد آیندگان بخوره :)

مشکل اینه که شما وقتی یه پروژه با asp.net core دارین و یه (یک الی هرچند تا) پروژه spa با یکی از فریمورک های js مثل angular, vue, react دارین، و میخان داخل پروژه asp.net core خودتون ، پروژه spa خودتون رو هم لود کنین.

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

اما

مشکلی وقتی ایجاد میشه که به روت های پروژه spa خودتون، فقط از طریق dom دسترسی دارین، نه از url

میدونم ناواضح گفتم.

بذارین یه مثال ساده بزنم.

ما پروژه asp.net core رو داخل دامین mzeynali.ir پابلیش میکنیم، و میاییم پروژه spa خودمون رو هم داخل همین دامین پابلیش میکنیم، یعنی با آدرس mzeynali.ir/app آپلودش میکنیم،

و ما یه روت به شرح زیر داخل spa app خودمون داریم:

mzeynali.ir/app/blogs/1

اگ این آدرس رو توی مرورگر سرچ کنیم اخطار not found دریافت میکنیم، اما اگ از داخل خود spa app خودمون با انتخاب منو هامون به این آدرس بریم، صفحه برامون باز میشه و اخطار not found رو دریافت نمیکنیم!! (امیدوارم تونسته باشم چالش رو بهتون درست توضیح داده باشم)

خب دلیل چیه؟؟

دلیل اینه middlware های asp.net core فقط روت های خودش رو میشناسه، و اصل خبر نداره ما داخلش یه پروژه spa هم داریم.

راه حل چیه؟؟

راه حل خیلی ساده اس، فقط باید به asp,net core بگیم، سلام عزیزم من یه spa app دارم، روت های خودتو وردار و روت های spa رو بده به فلان اپ.

یعنی اینجوری:

مرحله اول:

کنار سرویس هاتون این رو ادد کنین:

نکته: سرویس های شما توی dotnet5 به قبل، داخل فایل Startup.cs هس، ولی توی dotnet5 به بعد فایل Startup.cs حذف شد و با فایل program.cs تلفیق شد (درواقع کد های تکراری رفت توی لول بالا تر( کدها دسته بالا))

مرحله دوم:

یه لیوان آب بخورین :)

مرحله سوم:

داخل middleware هاتون این رو دقیقا بعد از middleware های روت ( مثل : UseEndpoints) اضافه کنین.

چند تا نکته مهم:

اول اینکه: "SpayApp/MZeynali.ir" این دقیقا آدرس جاییه که dist پروژه spa خودتون رو قرار دادین (این مسیر رو باید داخل wwwroot پروژه asp,net core بذارین و اگه پروژتون api هس و wwwroot ندارین، باید useStaticFile روبنویسین تا WWWROOT را به api خودتون اضافه کنین.

نکته دوم:

برین آب بخورین :)

یا علی




Software Engineer
شاید از این پست‌ها خوشتان بیاید