ASP.NET Core 6.0'da yeni minimal barındırma modeline geçirilen kod örnekleri
Bu makalede, ASP.NET Core 6.0'a geçirilen kod örnekleri sağlanır. ASP.NET Core 6.0 yeni bir minimal barındırma modeli kullanır. Daha fazla bilgi için bkz . Yeni barındırma modeli.
Ara yazılım
Aşağıdaki kod, Statik Dosya Ara Yazılımını bir ASP.NET Core 5 uygulamasına ekler:
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
}
}
Aşağıdaki kod, Statik Dosya Ara Yazılımını bir ASP.NET Core 6 uygulamasına ekler:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseStaticFiles();
app.Run();
WebApplication.CreateBuilder önceden yapılandırılmış varsayılanlarla WebApplicationBuilder sınıfının yeni bir örneğini başlatır. Daha fazla bilgi için bkz . ASP.NET Core Ara Yazılımı
Yönlendirme
Aşağıdaki kod bir ASP.NET Core 5 uygulamasına uç nokta ekler:
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", () => "Hello World");
});
}
}
.NET 6'da yollar veya UseRoutingiçin açık bir çağrı olmadan doğrudan WebApplication öğesine UseEndpoints eklenebilir. Aşağıdaki kod bir ASP.NET Core 6 uygulamasına uç nokta ekler:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Not: İşlem hattının sonunda doğrudan WebApplication yürütmeye eklenen yollar.
İçerik kökünü, uygulama adını ve ortamı değiştirme
ASP.NET Core 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseContentRoot(Directory.GetCurrentDirectory())
.UseEnvironment(Environments.Staging)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>()
.UseSetting(WebHostDefaults.ApplicationKey,
typeof(Program).Assembly.FullName);
});
ASP.NET Core 6
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
Args = args,
ApplicationName = typeof(Program).Assembly.FullName,
ContentRootPath = Directory.GetCurrentDirectory(),
EnvironmentName = Environments.Staging,
WebRootPath = "customwwwroot"
});
Console.WriteLine($"Application Name: {builder.Environment.ApplicationName}");
Console.WriteLine($"Environment Name: {builder.Environment.EnvironmentName}");
Console.WriteLine($"ContentRoot Path: {builder.Environment.ContentRootPath}");
Console.WriteLine($"WebRootPath: {builder.Environment.WebRootPath}");
var app = builder.Build();
Daha fazla bilgi için bkz . ASP.NET Temel bilgilere genel bakış
İçerik kökünü, uygulama adını ve ortamı ortam değişkenlerine veya komut satırına göre değiştirme
Aşağıdaki tabloda içerik kökünü, uygulama adını ve ortamı değiştirmek için kullanılan ortam değişkeni ve komut satırı bağımsız değişkeni gösterilmektedir:
özelliği | Ortam değişkeni | Komut satırı bağımsız değişkeni |
---|---|---|
Uygulama adı | ASPNETCORE_APPLICATIONNAME | --Applicationname |
Ortam adı | ASPNETCORE_ENVIRONMENT | --Ortam |
İçerik kökü | ASPNETCORE_CONTENTROOT | --contentRoot |
Yapılandırma sağlayıcıları ekleme
ASP.NET Core 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config =>
{
config.AddIniFile("appsettings.ini");
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
ASP.NET Core 6
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddIniFile("appsettings.ini");
var app = builder.Build();
Ayrıntılı bilgi için bkz. ASP.NET Core'da Yapılandırma bölümünde dosya yapılandırma sağlayıcıları.
Günlük sağlayıcıları ekleme
ASP.NET Core 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddJsonConsole();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
ASP.NET Core 6
var builder = WebApplication.CreateBuilder(args);
// Configure JSON logging to the console.
builder.Logging.AddJsonConsole();
var app = builder.Build();
Daha fazla bilgi için, bkz. .NET Core ve ASP.NET Core'da günlüğe kaydetme.
Hizmet ekleme
ASP.NET Core 5
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
// Add the memory cache services
services.AddMemoryCache();
// Add a custom scoped service
services.AddScoped<ITodoRepository, TodoRepository>();
}
}
ASP.NET Core 6
var builder = WebApplication.CreateBuilder(args);
// Add the memory cache services.
builder.Services.AddMemoryCache();
// Add a custom scoped service.
builder.Services.AddScoped<ITodoRepository, TodoRepository>();
var app = builder.Build();
Daha fazla bilgi için, bkz. ASP.NET Core'de bağımlılık ekleme.
IHostBuilder veya IWebHostBuilder'i özelleştirme
IHostBuilder'i özelleştirme
ASP.NET Core 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureHostOptions(o => o.ShutdownTimeout = TimeSpan.FromSeconds(30));
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
ASP.NET Core 6
var builder = WebApplication.CreateBuilder(args);
// Wait 30 seconds for graceful shutdown.
builder.Host.ConfigureHostOptions(o => o.ShutdownTimeout = TimeSpan.FromSeconds(30));
var app = builder.Build();
IWebHostBuilder'i özelleştirme
ASP.NET Core 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// Change the HTTP server implementation to be HTTP.sys based.
webBuilder.UseHttpSys()
.UseStartup<Startup>();
});
ASP.NET Core 6
var builder = WebApplication.CreateBuilder(args);
// Change the HTTP server implementation to be HTTP.sys based.
// Windows only.
builder.WebHost.UseHttpSys();
var app = builder.Build();
Web kökünü değiştirme
Varsayılan olarak, web kökü klasördeki içerik köküne wwwroot
göredir. Web kökü, statik dosyalar ara yazılımının statik dosyaları ara yazılımının ara yazılım tarafından arandığı yerdir. Web kökü, özelliği üzerinde WebApplicationOptionsayarlanarak WebRootPath değiştirilebilir:
ASP.NET Core 5
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// Look for static files in webroot.
webBuilder.UseWebRoot("webroot")
.UseStartup<Startup>();
});
ASP.NET Core 6
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
Args = args,
// Look for static files in webroot
WebRootPath = "webroot"
});
var app = builder.Build();
Özel bağımlılık ekleme (DI) kapsayıcısı
Aşağıdaki .NET 5 ve .NET 6 örnekleri Autofac'ı kullanır
ASP.NET Core 5
Program sınıfı
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Startup
public class Startup
{
public void ConfigureContainer(ContainerBuilder containerBuilder)
{
}
}
ASP.NET Core 6
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
// Register services directly with Autofac here. Don't
// call builder.Populate(), that happens in AutofacServiceProviderFactory.
builder.Host.ConfigureContainer<ContainerBuilder>(builder => builder.RegisterModule(new MyApplicationModule()));
var app = builder.Build();
Ek hizmetlere erişme
Startup.Configure
aracılığıyla IServiceCollectioneklenen herhangi bir hizmeti ekleyebilir.
ASP.NET Core 5
public class Startup
{
// This method gets called by the runtime. Use this method to add services
// to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IService, Service>();
}
// Anything added to the service collection can be injected into Configure.
public void Configure(IApplicationBuilder app,
IWebHostEnvironment env,
IHostApplicationLifetime lifetime,
IService service,
ILogger<Startup> logger)
{
lifetime.ApplicationStarted.Register(() =>
logger.LogInformation(
"The application {Name} started in the injected {Service}",
env.ApplicationName, service));
}
}
ASP.NET Core 6
ASP.NET Core 6'da:
- üzerinde WebApplicationen üst düzey özellikler olarak kullanılabilen birkaç yaygın hizmet vardır.
- Ek hizmetlerin WebApplication.Services üzerinden el ile çözülmesi
IServiceProvider
gerekir.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<IService, Service>();
var app = builder.Build();
IService service = app.Services.GetRequiredService<IService>();
ILogger logger = app.Logger;
IHostApplicationLifetime lifetime = app.Lifetime;
IWebHostEnvironment env = app.Environment;
lifetime.ApplicationStarted.Register(() =>
logger.LogInformation(
$"The application {env.ApplicationName} started" +
$" with injected {service}"));
WebApplicationFactory veya TestServer ile test edin
ASP.NET Core 5
Aşağıdaki örneklerde test projesi ve WebApplicationFactory<TEntryPoint>kullanırTestServer
. Bunlar, açık başvuru gerektiren ayrı paketler olarak gönderiliyor:
WebApplicationFactory
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="{Version}" />
</ItemGroup>
TestServer
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="{Version}" />
</ItemGroup>
ASP.NET Core 5 kodu
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHelloService, HelloService>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IHelloService helloService)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync(helloService.HelloMessage);
});
});
}
}
TestServer ile
[Fact]
public async Task HelloWorld()
{
using var host = Host.CreateDefaultBuilder()
.ConfigureWebHostDefaults(builder =>
{
// Use the test server and point to the application's startup
builder.UseTestServer()
.UseStartup<WebApplication1.Startup>();
})
.ConfigureServices(services =>
{
// Replace the service
services.AddSingleton<IHelloService, MockHelloService>();
})
.Build();
await host.StartAsync();
var client = host.GetTestClient();
var response = await client.GetStringAsync("/");
Assert.Equal("Test Hello", response);
}
class MockHelloService : IHelloService
{
public string HelloMessage => "Test Hello";
}
WebApplicationFactory ile
[Fact]
public async Task HelloWorld()
{
var application = new WebApplicationFactory<Program>()
.WithWebHostBuilder(builder =>
{
builder.ConfigureServices(services =>
{
services.AddSingleton<IHelloService, MockHelloService>();
});
});
var client = application.CreateClient();
var response = await client.GetStringAsync("/");
Assert.Equal("Test Hello", response);
}
class MockHelloService : IHelloService
{
public string HelloMessage => "Test Hello";
}
ASP.NET Core 6
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSingleton<IHelloService, HelloService>();
var app = builder.Build();
var helloService = app.Services.GetRequiredService<IHelloService>();
app.MapGet("/", async context =>
{
await context.Response.WriteAsync(helloService.HelloMessage);
});
app.Run();
Proje dosyası (.csproj)
Proje dosyası aşağıdakilerden birini içerebilir:
<ItemGroup>
<InternalsVisibleTo Include="MyTestProject" />
</ItemGroup>
Veya
[assembly: InternalsVisibleTo("MyTestProject")]
Alternatif bir çözüm, sınıfı genel Program
yapmaktır. Program
, projede veya Program.cs
içinde bir public partial Program
sınıf tanımlanarak Üst düzey deyimlerle genel kullanıma açılabilir:
var builder = WebApplication.CreateBuilder(args);
// ... Configure services, routes, etc.
app.Run();
public partial class Program { }
[Fact]
public async Task HelloWorld()
{
var application = new WebApplicationFactory<Program>()
.WithWebHostBuilder(builder =>
{
builder.ConfigureServices(services =>
{
services.AddSingleton<IHelloService, MockHelloService>();
});
});
var client = application.CreateClient();
var response = await client.GetStringAsync("/");
Assert.Equal("Test Hello", response);
}
class MockHelloService : IHelloService
{
public string HelloMessage => "Test Hello";
}
.NET 5 sürümü ve .NET 6 sürümü WebApplicationFactory
, tasarım gereği aynıdır.
ASP.NET Core