在页面之间传递包含特殊字符的 Blazor 参数的建议方法是什么



我有一个接受这样参数的目标页面...

@page "/LocationDetailPopup/{placename}"
@code{
[Parameter]
public string placename { get; set; }

}

我提供从源页面链接到它,就像这样......

<a href="/LocationDetailPopup/@Uri.EscapeDataString(place)"> more info...</a>

这在内部导航时工作正常,即使place实际上是字符串,例如"38.7650,-90.3540"。这将生成如下所示的 URI...

https://..mydomain.../locationdetailpopup/38.7650%2C-90.3540

但是,如果我保存目标页面的 URI 并将其粘贴到另一个浏览器选项卡中,当place包含连字符或句点时,我会收到 404 错误。 (如果place是字符串,例如"Joes Diner",则工作正常。如果我手动编辑 URI 以转义连字符和句点,我也会收到 404 错误,即

https://..mydomain.../locationdetailpopup/38%2E7650%2C%2D90%2E3540

我可以通过在源和目标上实现我自己的转义/取消转义机制来解决这个问题,但似乎应该有一种更简单的方法来安全地传递参数,允许它们在永久链接中使用。 看起来UriHelper.BuildRelative 应该在这里有用,但我无法找到正确的使用它的方法。

需要明确的是,我正在寻找一种方法来生成包含任意参数的 URI,该参数可以安全地用作内部链接和外部永久链接,而不会触发 404 错误。

您可以使用 QueryHelpers

<a href="/LocationDetailPopup?test=@Uri.EscapeDataString(place)"> more info...</a>
protected override async Task OnInitializedAsync()
{
if (QueryHelpers.ParseQuery(uri.Query).TryGetValue("test", out var testfromUrl))
{
test= testfromUrl.First();
}
}

最新更新