无法在Blazor的URL参数中使用越南语/带符号和空格字符

时间:2019-11-04 03:41:50

标签: .net blazor asp.net-core-3.0 blazor-server-side

我将blazor与.net core 3.0结合使用来开发一个允许在URL中传递某些参数的网站。

问题是,每当我在URL中传递越南语关键字时,blazor就会在浏览器控制台上抛出一个内部异常。

请注意,我无法使用Bundle.main.pathForResource("YourImage", ofType: "png")来提取信息,因为在Encode URL调用之前,blazor会自行抛出异常。

工作

OnAfterRenderAsync

不起作用

https://localhost:44316/?keyword=tieng viet
https://localhost:44316/?keyword=tieng%20viet

如何复制:

  • 只需使用.net core 3.0创建一个全新的blazor项目。
  • 然后启动项目并尝试使用这些URL。

=>由于我没有在此处添加任何额外的代码,所以blazor不应抛出任何异常

这里是个例外: Here is the exception

感谢帮助!

2 个答案:

答案 0 :(得分:1)

  

我每次都要编码和解码

不确定是否是错误。但是,您不必每次都进行编码和解码。作为一种解决方法,我们可以创建一个快速且肮脏的修复程序,以便将查询字符串中的space转换为+

由于调用远程signalR ComponentHub::StartCircuit()方法时会发生此错误,因此我们可以在将该位置传递给siganlR之前对其进行替换。根据建议localhost:44316/?keyword=ti%E1%BA%BFng+vi%E1%BB%87t的{​​{3}},您可以在script中添加一个_Host.cshtml,如下所示:

<script>
    !function(){
        var raw = new URL(window.location.href);
        raw.search = raw.search.replace("%20","+");    // replace the `%20` with "+"
        window.history.replaceState('', document.title, raw);
    }();
</script>
<script src="_framework/blazor.server.js"></script>

通过这种方式,您的服务器端代码不必关心编码。

答案 1 :(得分:0)

第一件事:这与Blazor无关

您只是在使用无效的URI。 URI中使用的每个字符必须通过US-ASCII表具有相应的字符。

Blazor只是调用Uri.IsWellFormedUriString,对于您给定的示例,它返回false。

正如其他人指出的,解决方案是对url进行编码。必须先之前使用该URL导航到blazor页面。