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

时间:2019-10-23 07:33:35

标签: asp.net-core blazor blazor-server-side

我在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>

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您尝试过UsePathBase吗?

app.UsePathBase("/subsite");

这是我的测试结果

test result

请查看此文章以获取更多信息 https://www.billbogaiv.com/posts/net-core-hosted-on-subdirectories-in-nginx

答案 1 :(得分:-1)

来自docs

  

重写URL以进行正确的路由

     

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

     
      
  • Main.razor –在应用程序的根目录中加载,并包含指向About组件(href="About")的链接。
  •   
  • About.razor About组件。
  •   
     

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

     
      
  • 浏览器发出请求。
  •   
  • 返回默认页面,通常为 index.html
  •   
  • index.html 引导应用程序。
  •   
  • Blazor的路由器加载,并呈现Razor Main组件。
  •   
     

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

     

如果使用浏览器的地址栏为About发出了请求,则该请求将失败。应用的Internet主机上不存在此类资源,因此返回 404-未找到响应。

     

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

     

部署到IIS服务器时,可以将URL重写模块与应用程序发布的 web.config 文件一起使用。有关更多信息,请参见IIS部分。


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

如果只有一个网站,则可以将网站添加到ARR服务器场中,然后它将自动创建路由规则。通过运行状况检查来监视后端服务器将很方便。

Is this ARR warning causing my 404?