Серверная сторона Blazor за обратным прокси 404


10

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

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

_framework / blazor.server.js

Моя базовая ссылка настроена на "/ subsite /":

<base href="https://stackoverflow.com/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
blazor.server.js - это встроенный ресурс. Вы можете попробовать получить копию файла и статически обработать его, как любой другой файл js. Но даже тогда между сервером и браузером много болтовни. Не уверен, как это будет работать в вашей настройке.
Ravi

Хм. Я не очень понимаю, потому что компоненты тоже являются встроенными ресурсами, которые живут в _content, но он находит их просто отлично. Я попытаюсь захватить его и обслуживать статически, но это похоже на реальную ошибку - я имею в виду, как вы можете забыть поддержать
подсайты

Есть ли у вас какие-либо журналы, чтобы увидеть, какой (и если) путь запроса заканчивается ASP.NET?
Хенк

Ответы:



-1

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

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

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

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

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

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

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

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

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

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


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

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

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


Ну, насколько я вижу - эта статья вращается вокруг Blazor WebAssembly, и я использую серверную часть. Более того, мой IIS уже использует функцию прямого прокси-сервера ARR (так я делаю обратный прокси-сервер в моей настройке).
Динде
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.