微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin Launcher.OpenAsync“请求网址太长”

如何解决Xamarin Launcher.OpenAsync“请求网址太长”

我正在尝试使用 URI 方案和 Xamarin Launcher 将图像(它不能是文件,必须是 base64)发送到另一个应用程序。

var uri = new Uri(url);  
await Launcher.OpenAsync(uri); // await Launcher.OpenAsync(url);

如果 url 长度超过 2000 个字符,new Uri(url)await Launcher.OpenAsync(url) 都会给出异常。

据我所知,将 base64 字符串传递给其他应用程序(例如编辑图像或打印文档)是正常的。那么为什么 Xamarin 将其限制为 2000 个字符?

解决方法吗?

编辑:
new Uri 上的异常:

System.UriFormatException: Invalid URI: The Uri string is too long.
  at System.Uri.CreateThis (System.String uri,System.Boolean dontEscape,System.UriKind uriKind) [0x0007b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/System/net/System/UriExt.cs:55 
  at System.Uri..ctor (System.String uriString) [0x00014] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/System/net/System/URI.cs:408 

Launcher.OpenAsync 上的异常:

System.UriFormatException: Invalid URI: The Uri string is too long.
  at System.Uri.CreateThis (System.String uri,System.UriKind uriKind) [0x0007b] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/System/net/System/UriExt.cs:55 
  at System.Uri..ctor (System.String uriString) [0x00014] in /Users/builder/jenkins/workspace/archive-mono/2020-02/android/release/mcs/class/referencesource/System/net/System/URI.cs:408 
  at Xamarin.Essentials.Launcher.OpenAsync (System.String uri) [0x00013] in D:\a\1\s\Xamarin.Essentials\Launcher\Launcher.shared.cs:32 

解决方法

这似乎是 System.Uri 类的限制。虽然它没有正式记录,如果你搜索你会发现很多地方都在讨论这个,比如这里:https://social.msdn.microsoft.com/forums/en-US/6435996c-4b96-4887-be60-f6e10120f0a0/long-http-get-requests-and-a-uri-max-length-constraint

基本上你必须使用原生类来实现你想要的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。