Cod*_*Lee 8 c# page-refresh blazor blazor-server-side
我有一个 Blazor 服务器应用程序,其中一个页面接受 uri 中的参数。当我单击具有路由设置的锚标记以使用参数(如下所示)访问该页面时,链接工作正常,并且页面加载。
<a href="/MyPage/{@Param1}/{@Param2}"> <!--link content in here--> </a>
Run Code Online (Sandbox Code Playgroud)
但是,如果尝试直接从该 URL 访问该页面,或者在浏览器中手动刷新,则该页面不会重新初始化或命中参数上的任何断点。相反,它会抛出 404 not found。
所以这里有两件事:
@page可以与刷新/直接网址一起正常工作时。相关页面的 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 />
Run Code Online (Sandbox Code Playgroud)
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑——每个评论建议
Startup.cs 中配置方法的 UseEndpoints 部分:
app.UseEndpoints(endpoints =>
{
endpoints.MapBlazorHub();
endpoints.MapFallbackToPage("/_Host");
});
Run Code Online (Sandbox Code Playgroud)
.经过进一步挖掘,我注意到 @param2中偶尔会有一个字符。Blazor 确实需要配置参数中带有点的路由。下面的回退不起作用:
endpoints.MapFallbackToPage("/MyPage/{Param1}/{Param2}", "/MyPage");
Run Code Online (Sandbox Code Playgroud)
它抛出一个:
InvalidOperationException: Cannot find the fallback endpoint specified by route values: { page: /MyPage, area: }.
我猜area:空是一个问题,但我没有找到如何或在哪里正确设置它。链接中的示例仅显示后备页面的名称。有人可以指出这种回退有什么问题以及如何正确纠正它吗?
我的问题是参数值中存在点字符。当路由问题是由于参数中的“点”引起时,那么完全按照文档建议的操作就可以解决问题(如图)。您将需要为该特定路线指定回退,如下所示:
endpoints.MapFallbackToPage("/MyPage/{Param1}/{Param2}", "/_Host");
Run Code Online (Sandbox Code Playgroud)
对于 WASM 项目:您想要指定 html 文件与 _Host,该文件应该是 Blazor 服务器特定的。
endpoints.MapFallbackToFile("/MyPage/{Param1}/{Param2}", "index.html");
Run Code Online (Sandbox Code Playgroud)
应用此设置后,刷新页面或直接访问 URL 应该会导致您的应用程序按预期工作,不再出现与标准<NotFound>标记设置不同的 404 错误。App.razor.
_Host它是index.html| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |