我使用自定义协议从Windows运行时应用中打开另一个应用。我正在使用以下代码段:
await Launcher.LaunchUriAsync(new Uri("appb://hello"));
当有普通字符串时,它工作正常。但它在传递JSON字符串时给出了解析错误。
Invalid URI: The hostname could not be parsed.
我通过以下方式创建JSON:
JObject jObj = new JObject();
jObj.Add("Name", "abcdef");
jObj.Add("Address", "acvdfs");
string json = jObj.ToString();
它将JSON表示为:
{"姓名":" abcdef","地址":" acvdfs" }
答案 0 :(得分:2)
您的问题是因为您要将整个 json
字符串发送为Uri。
您需要首先从字符串中获取所需的值,然后然后将这些值传递给您的方法。
举个例子,让我们说你的
JObject jObj = new JObject();
jObj.Add("Name", "abcdef");
jObj.Add("Address", "acvdfs");
string json = jObj.ToString();
代码会为您提供“{Name}/{Address}
”输出 - appb://abcdef/acvdfs
不是直接将其解析为string
,而是需要先取出值。
否则你的
{“姓名”:“abcdef”,“地址”:“acvdfs”}
是导致
的原因无效的URI:无法解析主机名。
错误。
您可以执行此操作以从该字符串中检索值:
var values = jObj.Properties().Select(x => x.Value.ToString()).ToArray(); // Gives you an array of the values.
var path = string.Join("/", values); // Creates an "a/b" path by joining the array.
await Launcher.LaunchUriAsync(new Uri("appb://" + path)); // Give that path to create the Uri and pass to your method.
此代码假设您只使用密钥以我的方式创建路径。它适用于任意数量的键,因为它只是将所有值与“/”连接在一起 - 例如a/b/c/d/e/f/g
等。
有任何问题,请问:)
希望这有帮助!