asp. net ядро ​​перенаправления внутри промежуточного ПО - PullRequest
0 голосов
/ 15 января 2020

Я хочу создать страницу, позволяющую создать базу данных и инициализировать данные приложения по умолчанию для каждого нового развертывания. для этого я создаю промежуточное ПО, которое проверяет, можно ли подключиться к базе данных. в случае невозможности подключения к базе данных (что означает, что база данных еще не существует), промежуточное программное обеспечение перенаправляет на действие приложения, отвечающего за сбор данных по умолчанию, и приступает к созданию базы данных. Однако в промежуточном программном обеспечении перенаправление не работает, несмотря на все попытки, кроме перенаправления на внешний сайт, такой как google.com. Я использую asp. net core 2.2 и entityframework core

MissingDatabaseMiddleware.cs

public class MissingDatabaseMiddleware
    {
        private readonly RequestDelegate _next;
        private readonly string _missingTenantUrl;

        public MissingDatabaseMiddleware(RequestDelegate next, string missingTenantUrl)
        {
            _next = next;
            _missingTenantUrl = missingTenantUrl;
        }
        public async Task Invoke(HttpContext httpContext, MydbContext context)
        {
            if (!context.Database.CanConnect())
            {
                httpContext.Response.Redirect(_missingTenantUrl, false);
                return;
            }
            await _next.Invoke(httpContext);
        }
    }

startup.cs

 public void Configure(IApplicationBuilder app, Microsoft.AspNetCore.Hosting.IHostingEnvironment env, MydbContext, ILoggerFactory loggerFactory){

 app.UseMiddleware<MissingDatabaseMiddleware>("/Setup/AppSetup");

 app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
                routes.MapRoute(
                    name: "areas",
                    template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
            });

}

1 Ответ

0 голосов
/ 15 января 2020

решение заключается в добавлении чека в URL запроса

 public async Task Invoke(HttpContext httpContext, MemoryDbContext context)
        {
            if (!context.Database.CanConnect() && !httpContext.Request.GetEncodedUrl().Contains(_missingTenantUrl))
            {
                httpContext.Response.Redirect(_missingTenantUrl, false);
                return;
            }
            await _next.Invoke(httpContext);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...