本文介绍了手动刷新时找不到带有抛出参数&404的Blazor服务器页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个Blazor Server应用程序,其页面接受URI中的参数。当我单击具有使用参数(如下所示)访问该页面的路由设置的锚定标记时,链接工作正常,并且页面加载。
<a href="/MyPage/{@Param1}/{@Param2}"> <!--link content in here--> </a> 但是,如果用户尝试直接从该URL访问页面,或者在浏览器中手动刷新,则页面不会重新初始化或命中参数上的任何断点。相反,它会抛出404 Not Found。这里有两件事:
- 首先,我搞不懂为什么它在锚标记中工作得很好,但却以其他方式死亡。尤其是当@page指令中没有参数的页面与刷新/直接URL配合使用时更是如此。
- 第二,这是Blazor Server的预想行为,还是我在这里遗漏了什么,直接破坏了页面刷新/点击-url?看起来不像功能,但可能是我误解了Blazor的路由。
问题页面的Razor和Razor.cs:
@page "/MyPage/{Param1}/{Param2}" <h1>MyPage</h1> <Metrics Param1="@Param1" /> <Details Param1="@Param1" Param2="@Param2" /> <InProgress Param1="@Param1" Param2="@Param2" /> <InQueue Param1="@Param1" /> <br /> using System; using System.Linq; using System.Threading.Tasks; using System.Collections.Generic; using Microsoft.AspNetCore.Components; using MyApp.Data.Models.ApiResponse; namespace MyApp.Pages { public partial class MyPage { [Parameter] public string Param1 { get; set; } [Parameter] public string Param2{ get; set; } public TaskList Tasks { get; set; } protected override Task OnInitializedAsync() { // work in progress, intend to do more here later on var test = ""; return base.OnInitializedAsync(); } } }编辑--每个评论建议
Startup.cs中Configure方法的UseEndpoint部分:
app.UseEndpoints(endpoints => { endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); });进一步挖掘后,我注意到@param2偶尔会有.字符。Blazor确实需要配置params with dots in them的路由。以下回退不起作用:
endpoints.MapFallbackToPage("/MyPage/{Param1}/{Param2}", "/MyPage");它抛出一个: InvalidOperationException: Cannot find the fallback endpoint specified by route values: { page: /MyPage, area: }.
我猜area:为空是个问题,但我找不到如何或在哪里正确设置。链接中的示例在后备中仅显示页面的名称。有没有人能指出这个后退有什么问题,怎样才能正确地纠正它?
推荐答案我的问题是参数值中有一个点字符。如果路由问题来自参数中的一个点,则执行docs建议的操作会奏效(图中所示)。您需要为该特定路由指定回退,如下所示:
endpoints.MapFallbackToPage("/MyPage/{Param1}/{Param2}", "/_Host");对于WASM项目:您希望指定html文件vs_Host,该文件应该特定于Blazor Server。
endpoints.MapFallbackToFile("/MyPage/{Param1}/{Param2}", "index.html");应用此设置后,刷新页面或直接访问URL应该会使您的应用程序按预期工作,不会再出现与App.razor中的标准<NotFound>标记设置不同的404错误。
要点:- 检查您的url参数是否有任何已知的分析异常,如点(Blazor假设这些是被请求的文件)
- 使用应用程序的默认页面进行回退,而不是要访问的页面。在_Host用于wasm的服务器应用程序中,它是index.html
更多推荐
手动刷新时找不到带有抛出参数&404的Blazor服务器页面
发布评论