Swagger не может отобразить и получить не найден,. Net Core 3.1 + Angular на Nginx - PullRequest
0 голосов
/ 05 августа 2020

Я использовал net core 3.1 и angular веб-сайт сборки на Nginx. (Ubuntu 18.04).

Но когда я пытаюсь использовать swaggerUI, он не может нормально отображаться. Экран пустой.

Инструменты отладки сообщают, что некоторые файлы не могут быть найдены (404).

My swagger. json и html могут загружаться, но кажутся js / css файл не загружается.

Инструмент разработчика браузера

Failed to load resource: the server responded with a status of 404 (Not Found)
swagger-ui-bundle.js:1 Failed to load resource: the server responded with a status of 404 (Not Found)
swagger-ui-standalone-preset.js:1 Failed to load resource: the server responded with a status of 404 (Not Found)
index.html:66 Uncaught ReferenceError: SwaggerUIBundle is not defined at window.onload (index.html:66)
swagger-ui.css:1 Failed to load resource: the server responded with a status of 404 (Not Found)

Nginx структура папок

var
|
|-->www  Angular Flies(index/js/css)
|
|-->api  Net Core Files

Nginx config

server {

    listen        80;
    server_name  domainname.com *.domainname.com;

    location / {
        root /var/www/;
        try_files /index.html =404;
    }

    location ~* .(js|jpg|png|css|woff|eot|svg|ttf|ico)$ {
        root /var/www/;
        expires 30d;
    }

    location /api/ {
        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;
    }

}

Настройка Swagger для ядра Net.

app.UseSwagger(options=>
{
    options.RouteTemplate = "/api/swagger/{documentName}/swagger.json";
});

app.UseSwaggerUI(options =>
{
    options.RoutePrefix = "api";
    foreach (var desc in provider.ApiVersionDescriptions)
        options.SwaggerEndpoint($"swagger/{desc.GroupName}/swagger.json",
        desc.GroupName.ToUpperInvariant());
});
app.UseStaticFiles();

Я запускаю это на своем локальном компьютере, а не проблема, только publi sh на nginx имеет эту проблему. Как я могу изменить конфигурацию, чтобы swaggerUI работал?

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

По моему ответу я обнаружил другую проблему.

Веб-сайт angular не будет работать, он не может загружать файлы js / css.

Наконец, я нашел лучший способ исправьте эту проблему.

server {

    listen        80;
    server_name  domainname.com *.domainname.com;

    location /api/ {
        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 / {
        root /var/www/;
        try_files /index.html =404;
    }

    location ~* ^/api/.+\.(xml|js|jpg|png|css|html|otf|eot|svg|ttf)$ {
        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;

        expires 90d;
    }

    location ~* \.(xml|js|jpg|png|css|html|otf|eot|svg|ttf)$ {
        root /var/www/;
        expires 30d;
        index index.html;
    }
}

Это моя последняя конфигурация, и я проверил, что SwaggerUI и веб-сайт могут работать.

0 голосов
/ 05 августа 2020

Хорошо, я обнаружил проблему и исправил ее.

Nginx неверная конфигурация.

Я закомментировал эту часть, и она может работать.

location ~* .(js|jpg|png|css|woff|eot|svg|ttf|ico)$ {
        root /var/www/;
        expires 30d;
    }
...