首页 > 解决方案 > Xamarin Launcher.OpenAsync“请求 url 太长”

问题描述

我正在尝试使用 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.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 
  at Xamarin.Essentials.Launcher.OpenAsync (System.String uri) [0x00013] in D:\a\1\s\Xamarin.Essentials\Launcher\Launcher.shared.cs:32 

标签: androidxamarinurl-scheme

解决方案


看来这是 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

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


推荐阅读