مشخصات مقاله
-
991
-
0.0
-
2360
-
0
-
0
آموزش MVC Core-آموزش استفاده از ارائه دهندگان فایل(Provider) در MVC Core
آموزش MVC Core-آموزش استفاده از ارائه دهندگان فایل(Provider) در MVC Core
Problem
نحوه دسترسی به اطلاعات دایرکتوری و فایل در ASP.NET Core، تضمین دسترسی محدود به فایل سیستم.
Solution
یک پروژه خالی ایجاد کنید و کلاس Startup را اصلاح کنید:
public void ConfigureServices(
IServiceCollection services)
{
services.AddSingleton< IFileProvide r>(
new PhysicalFileProvider(Directory.GetCurrentDirectory()));
}
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env)
{
app.UseHelloFileProvider();
ایجاد middle برای خواندن محتویات دایرکتوری.
public class HelloFileProviderMiddleware
{
private readonly RequestDelegate next;
private readonly IFileProvider fileProvider;
public HelloFileProviderMiddleware(
RequestDelegate next,
IFileProvider fileProvider)
{
this.next = next;
this.fileProvider = fileProvider;
}
public async Task Invoke(HttpContext context)
{
var output = new StringBuilder("");
IDirectoryContents dir = this.fileProvider.GetDirectoryContents("");
foreach (IFileInfo item in dir)
{
output.AppendLine(item.Name);
}
await context.Response.WriteAsync(output.ToString());
}
}
public class HelloFileProviderMiddleware
{
private readonly RequestDelegate next;
private readonly IFileProvider fileProvider;
public HelloFileProviderMiddleware(
RequestDelegate next,
IFileProvider fileProvider)
{
this.next = next;
this.fileProvider = fileProvider;
}
public async Task Invoke(HttpContext context)
{
IFileInfo file = this.fileProvider.GetFileInfo("Startup.cs");
using (var stream = file.CreateReadStream())
using (var reader = new StreamReader(stream))
{
var output = await reader.ReadToEndAsync();
await context.Response.WriteAsync(output.ToString());
}
}
}
Discussion
ASP.NET Core فراهم می کند encapsulation نوع System.IO.File را به منظور محدود کردن دسترسی به سیستم فایل از طریق نوع PhysicalFileProvider، که اجرای IFileProvider است.
IFileProvider را می توان به عنوان یک سرویس (in Startup) پیکربندی کرد و سپس به عنوان یک dependency در middleware، controllers و غیره تزریق می شود. این پیکربندی دسترسی فایل (مثلا دایرکتوری برای دسترسی) را در یک مکان، در شروع راه اندازی برنامه نگه می دارد.
IFileProvider دارای دو متد مهم است:
- GetDirectoryContents : IdirectoryContents را باز می گرداند. این را می تواند برای تکرار فایل ها / پوشه ها در یک دایرکتوری استفاده کرد.
- GetFileInfo: IFileInfo را باز می گرداند. این می تواند برای خواندن فایل از طریق CreateReadStream آن استفاده شود.