Настройка приложения ASP Net Core с подкаталогами - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь настроить приложение ASP Net Core в подкаталоге (http://<website>/app), но у меня возникает проблема с приложением, не распознающим, что его база URL должна начинаться с / app /. Поэтому, когда я делаю запросы к статическому контенту или действиям, он действует так, как если бы база была "/", а не "/ app". (например: http://<website>/app/<static_content> - это то, что мне нужно, но приложение запрашивает http://<website>/<static_content>)

NGINX настроен так:

server {
listen 80 default_server;
server_name <IP_Address>;
location /app/ {
    proxy_pass         http://localhost:4000/;
    proxy_http_version 1.1;
    proxy_set_header   Upgrade $http_upgrade;
    proxy_set_header   Connection keep-alive;
    proxy_set_header   Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Proto $scheme;
}}

Моя программа.cs

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseWebRoot(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot"))
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseStartup<Startup>()
                .UseUrls("http://localhost:4000");
    }

и мой startup.cs содержит это:

app.UsePathBase("/app");
app.UseStaticFiles();
            app.UseStaticFiles(new StaticFileOptions
            {
                FileProvider = new PhysicalFileProvider(
                    Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")),
                RequestPath = "/app/wwwroot"
            });

EDIT: Я заработал, удалив завершающий слеш на proxy_pass!

server {
    listen 80 default_server;
    server_name <IP_Address>;

    location /app1/ {
        proxy_pass         http://localhost:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

    location /app2/ {
        proxy_pass         http://localhost:5020;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

оба приложения теперь, кажется, делают правильные запросы.

1 Ответ

0 голосов
/ 13 ноября 2018

Для ответа на запрос от / до /app, попробуйте код ниже в Startup.cs

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

            }
        );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...