با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، با یکی دیگر از جلسات دوره کامل آموزش asp.net core در خدمت شما دوستان هستیم . در جلسه قبل این آموزش کار با استثناها و مدیریت خطاها را توضیح دادیم در این جلسه به کار با فایل های استاتیک در ASP.NET Core شامل میان افزار StaticFiles می پردازیم تا پایان این جلسه با ما همراه باشید.
به طور پیش فرض در برنامه ASP.NET Core نمی توان از فایل های استاتیک استفاده کرد . برای این منظور باید میان افزار Microsoft.AspNetCore.StaticFiles را در برنامه خود نصب کنیم .
در ASP.NET Core 2.x بسته میان افزار Microsoft.AspNetCore.StaticFiles در متا پکیج Microsoft.AspNetCore.All گنجانده شده است، بنابراین ما لازم نیست آن را به طور جداگانه نصب کنیم.
ولی برای نصب میان افزار staticfiles در برنامه ASP.NET Core 1.x، مدیر بسته مرجع NuGet را با کلیک راست روی پروژه در solution explorer باز کنید و Manage NuGet Packages را انتخاب کنید .
عبارت staticfiles را در کادر جستجو وارد کنید. در ادامه میان افزار Microsoft.AspNetCore.StaticFiles به صورت زیر نشان داده می شود.
برای نصب آن روی دکمه Install در قسمت راست کلیک کنید. پس از نصب، Microsoft.AspNetCore.StaticFiles به صورت خودکار در فایل project.json قرار می گیرد.
به طور پیش فرض تمام فایل های استاتیک یک برنامه وب باید در wwwroot واقع در ریشه پروژه قرار گیرد. برای درک این مطلب، ابتدا یک صفحه با نام default.html ساده در پوشه wwwroot با محتوای زیر ایجاد کنیم.
برای دسترسی به فایل استاتیک default.html، باید میان افزار StaticFiles را در متد Configure فایل Startup.cs اضافه کنیم، همانطور که در زیر نشان داده شده است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class Startup { public Startup() { } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseStaticFiles(); app.Run(async (context) => { await context.Response.WriteAsync("Hello World"); }); } } |
همانطور که می بینید ، متد app.UseStaticFiles میان افزار StaticFiles را به درخواست می افزاید. UseStaticFiles یک متد توسعه یافته است که در میان افزار StaticFiles موجود است تا ما بتوانیم به راحتی آن را پیکربندی کنیم.
حال مرورگر را باز کرده و درخواست” http://localhost:<port>/default.html ” را ارسال می کنیم که برنامه default.html را به عنوان پاسخ همانند زیر نمایش می دهد.
به این ترتیب ما می توانیم به هر فایل دیگری که در پوشه wwwroot یا زیرمجموعه های آن ذخیره شود، دسترسی داشته باشیم . برای مثال، فایل test.js زیر را در پوشه wwwroot در نظر بگیرید.
اکنون می توانیم به این فایل با ارسال درخواست ” http: //localhost:<port>/test.js ” دسترسی داشته باشیم.
اکنون فرض کنید می خواهید فایل ها را از خارج از پوشه ریشه وب (wwwroot) مورد استفاده قرار دهید . به عنوان مثال، میخواهید به تصاویری که در پوشه Images همانند زیر هستند دسترسی داشته باشید.
در این صورت ،باید پارامتر StaticFileOptions را در متد UseStaticFiles مشخص کنید تا تصاویر را از پوشه Images دریافت کنید، همانطور که در زیر نشان داده شده است.
1 2 3 4 5 6 7 8 9 10 11 | public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseStaticFiles(); // For the wwwroot folder app.UseStaticFiles(new StaticFileOptions() { FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), @"Images")), RequestPath = new PathString("/app-images") }); } |
همانطور که می بینید، از FileProvider برای مشخص کردن پوشه Images که در آن فایل های استاتیک وجود دارند، استفاده می کنیم. گزینه RequestPath مسیر نسبی URL را نشان می دهد که به پوشه استاتیک مراجعه می کند.
همانطور که در بالا مشاهده کردید ، توانستیم به فایل های default.html و test.js در هر درخواستمان دسترسی داشته باشیم. با این حال، اگر بخواهیم فایل html پیش فرض را در مسیر root بگذاریم باید چه کنیم؟
در حال حاضر، هنگامی که درخواست ” <HTTP://localhost:<port ” را ارسال می کنیم، نتیجه زیر نمایش داده می شود:
برای دسترسی به فایل default.html درخواست “<root http: // localhost: <port” را به سرور می فرستیم، با استفاده از متد UseDefaultFiles قبل از UseStaticFiles در متد Configure میتوانیم فایل پیشفرض را مشخص کنیم :
1 2 3 4 5 6 7 8 9 10 | public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseDefaultFiles(); app.UseStaticFiles(); app.Run(async (context) => { await context.Response.WriteAsync("Hello World"); }); } |
متد UseDefaultFiles به طور خودکار فایلهای default.html و یا index.html ، defaul.htm و یا index.htm را در درخواست ” <http: // localhost: <port” قرار می دهد که در اینجا فایل defaul.html موجود است پس نتیجه به صورت زیر می شود:
میان افزار FileServer ترکیبی از ویژگی های کاربردی UseDefaultFiles و میان افزار UseStaticFiles است. بنابراین، به جای استفاده از هر دو میان افزار ، میتوان فقط UseFileServer را در متد Configure استفاده کرد .
UseFileServer = UseDefaultFiles + UseStaticFiles
1 2 3 4 5 6 7 8 9 | public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseFileServer(); app.Run(async (context) => { await context.Response.WriteAsync("Hello World"); }); } |
در بخش بعدی در رابطه با انواع برنامه های NET Core. صحبت خواهیم کرد .
دانیال
درود # ممنون نصب کردم ولی یک پروژه آموزشی دارم که داخل آن اینجور صدا زده شده است
;()app.UseSpaStaticFiles
ولی بعد نصب این طریق صدا زده میشود نمیدانم مایکروسافت در حال رفع است
app.UseStaticFiles();