本文介绍了手动刷新时找不到带有抛出参数&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服务器页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!