Чтение онлайн

на главную

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

}

}

AutoLot.Mvc

Метод

Configure
для веб-приложений немного сложнее, чем его аналог для API. Ниже приведен полный код метода с последующим обсуждением:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

{

if (env.IsDevelopment)

{

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,

Поделиться:
Популярные книги

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

Сильнейший ученик. Том 2

Ткачев Андрей Юрьевич
2. Пробуждение крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сильнейший ученик. Том 2

Нищенка в элитной академии

Зимина Юлия
4. Академия юных сердец
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Нищенка в элитной академии

Назад в СССР 5

Дамиров Рафаэль
5. Курсант
Фантастика:
попаданцы
альтернативная история
6.64
рейтинг книги
Назад в СССР 5

Столичный доктор. Том III

Вязовский Алексей
3. Столичный доктор
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Столичный доктор. Том III

Секретарша генерального

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46
рейтинг книги
Секретарша генерального

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Идеальный мир для Социопата 3

Сапфир Олег
3. Социопат
Фантастика:
боевая фантастика
6.17
рейтинг книги
Идеальный мир для Социопата 3

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.20
рейтинг книги
Ученик

Попытка возврата. Тетралогия

Конюшевский Владислав Николаевич
Попытка возврата
Фантастика:
альтернативная история
9.26
рейтинг книги
Попытка возврата. Тетралогия

Ищу жену для своего мужа

Кат Зозо
Любовные романы:
любовно-фантастические романы
6.17
рейтинг книги
Ищу жену для своего мужа

Сила рода. Том 3

Вяч Павел
2. Претендент
Фантастика:
фэнтези
боевая фантастика
6.17
рейтинг книги
Сила рода. Том 3

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

На границе империй. Том 10. Часть 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 4