我有一个接受这样参数的目标页面...
@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();
}
}