Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
Метод Configure() также проверяет среду, и если она установлена в Development (среда разработки), тогда в конвейер обработки добавляется промежуточное ПО UseDeveloperExceptionPage(). Для любой другой среды в конвейер обработки добавляется универсальное промежуточное ПО UseExceptionHandler() и поддержка протокола строгой транспортной безопасности HTTP (HTTP Strict Transport Security — HSTS). Как и в аналоге для API, добавляется вызов app.UseHttpsRedirection(). Следующим шагом является добавление поддержки статических файлов с помощью вызова app.UseStaticFiles(). Поддержка статических файлов включается как мера по усилению безопасности. Если ваше приложение в ней не нуждается (подобно API-интерфейсам), тогда не добавляйте такую поддержку. Затем добавляется промежуточное ПО для маршрутизации, авторизации и конечных точек.
Добавьте в метод параметр типа АрplicationDbContext и вызовите InitializeData() из AutoLot.Dal. Вот модифицированный код:
public void Configure(
IApplicationBuilder app,
IWebHostEnvironment env,
ApplicationDbContext context)
{
if (env.IsDevelopment())
{
// Если среда разработки, тогда отображать отладочную информацию.
app.UseDeveloperExceptionPage();
// Инициализировать базу данных.
if (Configuration.GetValue<bool>("RebuildDataBase"))
{
SampleDataInitializer.InitializeData(context);
}
}
...
}
Обновите файл appsettings.development.json с учетом свойства RebuildDataBase (пока что установив его в false):
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"RebuildDataBase": false,
"ConnectionStrings": {
"AutoLot": "Server=db;Database=AutoLotPresentation;
User ID=sa;Password=P@ssw0rd;"
}
}
Стандартный шаблон настраивает в методе UseEndpoints() маршрутизацию на основе соглашений. Ее понадобится отключить и повсюду в приложении применять маршрутизацию с помощью атрибутов. Закомментируйте (или удалите) вызов MapControllerRoute() и замените его вызовом MapControllers():
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
Далее добавьте атрибуты маршрутов к HomeController в приложении AutoLot.Mvc. Первым делом добавьте шаблон контроллер/действие к самому контроллеру:
[Route("[controller]/[action]")]
public class HomeController : Controller
{
...
}
Затем добавьте три маршрута к методу Index(), так что он будет стандартным действием, когда не указано действие либо когда не указан контроллер или действие. Кроме того, снабдите метод атрибутом HttpGet, чтобы явно объявить его действием GET:
[Route("/")]
[Route("/[controller]")]
[Route("/[controller]/[action]")]
[HttpGet]
public IActionResult Index()
{
return View();
}
Ведение журнала
Базовая инфраструктура ведения журнала добавляется в контейнер DI как часть процесса запуска и конфигурирования. Инфраструктура ведения журнала использует довольно простой интерфейс ILogger<T>. Основополагающим компонентом ведения журнала является класс LoggerExtensions, определения методов которого показаны ниже:
public static class LoggerExtensions
{
public static void LogDebug(this ILogger logger, EventId eventId,
Exception exception, string message, params object[] args)
public static void LogDebug(this ILogger logger, EventId eventId,
string message, params object[] args)
public static void LogDebug(this ILogger logger, Exception exception,
string message, params object[] args)
public static void LogDebug(this ILogger logger,
string message, params object[] args)
public static void LogTrace(this ILogger logger, EventId eventId,
Exception exception, string message, params object[] args)
public static void LogTrace(this ILogger logger, EventId eventId,
string message, params object[] args)
public static void LogTrace(this ILogger logger, Exception exception,
string message, params object[] args)
public static void LogTrace(this ILogger logger,
string message, params object[] args)
Exception exception, string message, params object[] args)
public static void LogInformation(this ILogger logger, EventId eventId,
string message, params object[] args)
public static void LogInformation(this ILogger logger, Exception exception,
string message, params object[] args)
public static void LogInformation(this ILogger logger,
string message, params object[] args)
public static void LogWarning(this ILogger logger, EventId eventId,
Exception exception, string message, params object[] args)
public static void LogWarning(this ILogger logger, EventId eventId,
string message, params object[] args)
public static void LogWarning(this ILogger logger, Exception exception,
string message, params object[] args)
public static void LogWarning(this ILogger logger,
string message, params object[] args)
public static void LogError(this ILogger logger, EventId eventId,
Exception exception, string message, params object[] args)
public static void LogError(this ILogger logger, EventId eventId,
string message, params object[] args)
public static void LogError(this ILogger logger, Exception exception,
string message, params object[] args)
public static void LogError(this ILogger logger,
string message, params object[] args)
public static void LogCritical(this ILogger logger, EventId eventId,
Exception exception, string message, params object[] args)
public static void LogCritical(this ILogger logger, EventId eventId,
string message, params object[] args)
public static void LogCritical(this ILogger logger, Exception exception,
string message, params object[] args)
public static void LogCritical(this ILogger logger,
string message, params object[] args)
public static void Log(this ILogger logger, LogLevel logLevel,
string message, params object[] args)
public static void Log(this ILogger logger, LogLevel logLevel, EventId eventId,
string message, params object[] args)
public static void Log(this ILogger logger, LogLevel logLevel,
Exception exception, string message, params object[] args)
public static void Log(this ILogger logger, LogLevel logLevel, EventId eventId,
Exception exception, string