我将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
如何复制:
=>由于我没有在此处添加任何额外的代码,所以blazor不应抛出任何异常
感谢帮助!
答案 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页面。