我在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放在反向代理场景中的位置?
答案 0 :(得分:1)
您尝试过UsePathBase吗?
app.UsePathBase("/subsite");
这是我的测试结果
请查看此文章以获取更多信息 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服务器场中,然后它将自动创建路由规则。通过运行状况检查来监视后端服务器将很方便。