Страницы

Поиск по вопросам

суббота, 7 декабря 2019 г.

Как в asp.net core создать страницу “сайт на обслуживании”?

#c_sharp #aspnet_core


О хороших практиках в asp.net core.

Хочу создать на Home контроллере отдельный Action Maintainance, который будет показывать
заранее заготовленную страницу сайт на обслуживании.

Как реализовать включение/выключение подобной страницы в asp.net core? Есть ли какой-то
готовый способ?
    


Ответы

Ответ 1



Все ленятся, а по ссылке внезапно простое и приятное решение. If a file with the name app_offline.htm is detected in the root directory of an app, the ASP.NET Core Module attempts to gracefully shutdown the app and stop processing incoming requests. If the app is still running after the number of seconds defined in shutdownTimeLimit, the ASP.NET Core Module kills the running process. While the app_offline.htm file is present, the ASP.NET Core Module responds to requests by sending back the contents of the app_offline.htm file. When the app_offline.htm file is removed, the next request starts the app. Т.е. нужно создать файл app_offline.htm с нужным сообщением для пользователей и положить его в корень вашего asp.net приложения. Приложение будет остановлено, все запросы пользователей будут пересылаться на страницу. Как только файл будет удалён - доступ к приложению будет снова восстановлен. Как реализовать включение/выключение подобной страницы в asp.net core? С учетом того, что приложение останавливается - делать придётся вне приложения любым удобным способом - руками, отдельным приложением, скриптом. Как справедливо отметили, и как пишет МС: The ASP.NET Core Module is a native IIS module that plugs into the IIS pipeline to forward web requests to backend ASP.NET Core apps. Так что, к сожалению, это не кроссплатформенное решение, работает только с IIS.

Ответ 2



Создайте в вашем проекте файл MaintenanceMiddleware: using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; namespace WebApplication1 { public class MaintenanceMiddleware { private readonly RequestDelegate _next; public MaintenanceMiddleware(RequestDelegate next) { this._next = next; } public async Task InvokeAsync(HttpContext context) { if (IsMaintenance()) { context.Response.StatusCode = 503; await context.Response.WriteAsync("Maintenance"); } else { await _next.Invoke(context); } } private bool IsMaintenance() { // TODO Read from DB, from file on disk etc. throw new NotImplementedException(); } } } Это middleware, которая либо будет пропускать запрос, либо останавливать выполнение обработки запроса с выдачей некоторого текста и HTTP кода 503 (Можно редиректить на какую-то заранее заготовленную страницу) На ваше усмотрение, какое поставить условие для запуска режима обслуживания - либо проверить значение в базе данных, либо проверить наличие/отсутствие файла на диске. Не забудьте включить ваш класс в Startup.cs: // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseMiddleware();

Комментариев нет:

Отправить комментарий