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


10

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

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

_framework / blazor.server.js

我的基本href设置为“ / 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>

其他所有脚本引用都可以正常加载,即使_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放在反向代理场景中的什么位置?


1
blazor.server.js是嵌入式资源。您可以尝试获取该文件的副本,并像其他任何js文件一样静态地提供该文件。但是即使那样,服务器和浏览器之间仍然有很多信号-不休。不知道它如何在您的设置中工作。
拉维

嗯 我不是很明白,因为这些组件也是嵌入资源,都位于_content中,但是它发现它们还不错。我将尝试抓取它并进行静态服务,但这似乎是一个实际的错误-我的意思是,您怎么会忘记在2019
站点

您是否有任何日志记录可查看哪个(以及是否)请求路径以ASP.NET结尾?
Henk Holterman

Answers:



-1

来自文档

重写URL以进行正确的路由

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

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

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

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

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

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

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

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


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

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

这是ARR警告导致我的404吗?


好吧,据我所知-该文章围绕Blazor WebAssembly展开,而我正在使用服务器端。而且,我的IIS已经在使用ARR的正向代理功能(因为这就是我在设置中进行反向代理的方式)。
Dynde
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.