"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"RebuildDataBase": false,
"ConnectionStrings": {
"AutoLot": "Server=db;Database=AutoLotPresentation;
User ID=sa;Password=P@ssw0rd;"
}
}
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,
<b> ApplicationDbContext context)</b>
{
if (env.IsDevelopment())
{
// Если среда разработки, тогда отображать отладочную информацию.
app.UseDeveloperExceptionPage();
<b> // Инициализировать базу данных.</b>
<b> if (Configuration.GetValue<bool>("RebuildDataBase"))</b>
<b> {</b>
<b> SampleDataInitializer.InitializeData(context);</b>
<b> }</b>
}
...
}
Обновите файл
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
. Первым делом добавьте шаблон контроллер/действие к самому контроллеру: