Серверная часть Blazor за обратным прокси 404 - PullRequest
9 голосов
/ 23 октября 2019

У меня есть серверное приложение Blazor, размещенное на IIS за обратным прокси-сервером (с использованием ARR).

Я перепробовал все, что мог, но продолжаю получать 404 на

_framework / blazor.server.js

Для моего базового href установлено значение "/ subsite /":

<base href="/subsite/" />

, и все мои значения src относительно такие:

<script src="_framework/blazor.server.js"></script>
<script src="_content/BlazorInputFile/inputfile.js"></script>
<script src="animations.js"></script>

Каждый другой сценарий ref загружается нормально, ДАЖЕ _content данные, но не blazor.server.js.

Я попробовал старый трюк PathBase для приложений MVC, но безуспешно:

        if (!env.IsDevelopment()) {
            app.Use((context, next) => {
                context.Request.PathBase = new PathString("/subsite");
                return next();
            });
        }

Может кто-нибудь сказать мне, как заставить Blazor понять, куда поместить blazor.server.js в сценарии с обратным прокси?

1 Ответ

0 голосов
/ 10 ноября 2019

Из документов .

Перезапись URL-адресов для правильной маршрутизации

Маршрутизация запросов для компонентов страницы в приложении Blazor WebAssembly не так проста, как запросы маршрутизациина сервере Blazor, размещенное приложение. Рассмотрим приложение Blazor WebAssembly с двумя компонентами:

  • Main.razor - загружается в корень приложения и содержит ссылку на компонент About (href="About"),
  • О.Разор - About компонент.

Когда документ приложения по умолчанию запрашивается с помощью адресной строки браузера (например, https://www.contoso.com/):

  • Браузер делает запрос.
  • Возвращается страница по умолчанию, обычно это index.html .
  • index.html загружает приложение.
  • Маршрутизатор Blazor загружается, и компонент Razor Main отображается.

На главной странице выбор ссылки на компонент «О» работает на клиенте, поскольку маршрутизатор Blazor останавливает браузер от отправки запроса в Интернете до www.contoso.com для About и обслуживаетОтрисовал About сам компонент. Все запросы на внутренние конечные точки в приложении Blazor WebAssembly работают одинаково: запросы не инициируют запросы на основе браузера к размещенным на сервере ресурсам в Интернете. Маршрутизатор обрабатывает запросы внутренне.

Если запрос сделан с использованием адресной строки браузера для www.contoso.com/About, запрос завершится неудачно. На интернет-хосте приложения такого ресурса не существует, поэтому возвращается ответ 404 - Not Found .

Поскольку браузеры отправляют запросы на хосты в Интернете для клиентских страниц, веб-серверов ихостинговые сервисы должны переписать все запросы на ресурсы, не физически на сервере, на страницу index.html . Когда возвращается index.html , маршрутизатор Blazor приложения вступает во владение и отвечает с правильным ресурсом.

При развертывании на сервере IIS вы можете использовать модуль перезаписи URL с опубликованным приложением web.config file. Дополнительные сведения см. В разделе IIS .


Возможно, вы можете попытаться включить прямой прокси-сервер в диспетчере IIS-> узел сервера-> кэш маршрутизации запросов приложений-> proxy-> enable.

Если у вас есть только один веб-сайт, вы можете просто добавить веб-сайт в ферму серверов ARR, и тогда он автоматически создаст правило маршрутизации. Будет удобно контролировать внутренний сервер с помощью проверки работоспособности.

Это предупреждение ARR вызывает мои 404?

...