反向代理404后面的Blazor服务器端

Dyn*_*nde 9 asp.net-core blazor blazor-server-side

我在反向代理(使用ARR)后面的IIS上托管了一个出色的服务器端应用程序。

我已经尝试了所有可以想到的方法,但是我不断尝试404

_framework / blazor.server.js

我的基本href设置为“ / subsite /”:

<base href="/subsite/" />
Run Code Online (Sandbox Code Playgroud)

我所有的src值都是相对的,如下所示:

<script src="_framework/blazor.server.js"></script>
<script src="_content/BlazorInputFile/inputfile.js"></script>
<script src="animations.js"></script>
Run Code Online (Sandbox Code Playgroud)

其他所有脚本引用都可以正常加载,即使_content数据也可以加载,但blazor.server.js则不会。

我也尝试了用于MVC应用程序的旧PathBase技巧,但没有成功:

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

谁能告诉我如何使Blazor意识到将blazor.server.js放在反向代理场景中的什么位置?

Ham*_*hid -1

来自文档

\n\n
\n

重写 URL 以实现正确的路由

\n\n

在 Blazor WebAssembly 应用中路由页面组件的请求并不像在 Blazor 服务器托管应用中路由请求那么简单。考虑一个具有两个组件的 Blazor WebAssembly 应用程序:

\n\n
    \n
  • Main.razor \xe2\x80\x93 在应用程序的根目录加载并包含指向组件的链接About( href="About")。
  • \n
  • 关于.razor \xe2\x80\x93About组件。
  • \n
\n\n

当使用浏览器的地址栏请求应用程序的默认文档时(例如https://www.contoso.com/):

\n\n
    \n
  • 浏览器发出请求。
  • \n
  • 返回默认页面,通常是index.html
  • \n
  • index.html引导应用程序。
  • \n
  • Blazor 的路由器会加载,并且 RazorMain组件会被渲染。
  • \n
\n\n

在主页中,选择“关于”组件的链接在客户端上有效,因为 Blazor 路由器会阻止浏览器在 Internet 上发出请求并为www.contoso.com呈现AboutAbout组件本身提供服务。Blazor WebAssembly 应用内对内部终结点的所有请求都以相同的方式工作:请求不会触发对 Internet 上服务器托管资源的基于浏览器的请求。路由器在内部处理请求。

\n\n

如果使用浏览器地址栏发出请求www.contoso.com/About,则请求失败。应用程序的 Internet 主机上不存在此类资源,因此返回404 - 未找到响应。

\n\n

由于浏览器向基于 Internet 的主机发出客户端页面请求,因此 Web 服务器和托管服务必须将对物理上不在服务器上的资源的所有请求重写到index.html页面。返回index.html后,应用程序的 Blazor 路由器将接管并使用正确的资源进行响应。

\n\n

部署到 IIS 服务器时,您可以将 URL 重写模块与应用程序的已发布web.config文件结合使用。有关详细信息,请参阅IIS部分。

\n
\n\n
\n\n

也许您可以尝试在IIS管理器->服务器节点->应用程序请求路由缓存->代理->启用中启用转发代理。

\n\n

如果您只有一个网站,您只需将该网站添加到 ARR 服务器场,然后它就会自动创建路由规则。通过健康检查可以方便地监控后端服务器。

\n\n

这个 ARR 警告是否导致我的 404 错误?

\n