手动刷新时找不到带有抛出参数&404的Blazor服务器页面

编程入门 行业动态 更新时间:2024-10-15 00:26:42
本文介绍了手动刷新时找不到带有抛出参数&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服务器页面

本文发布于:2023-11-15 10:12:23,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1593508.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:找不到   抛出   参数   页面   服务器

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!