gpt4 book ai didi

image - 带有 SSL 的 Xamarin.Forms Image.Source

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:58 26 4
gpt4 key购买 nike

我正在使用一个在线商店来存储使用我们的受 SSL 保护的应用程序上传的用户图像。上传工作正常,因为我使用的是附带证书的 WebClient。但是当我尝试使用 Xamarin.Forms.Image 组件时,例如将源设置为“https://blabla.com/upload/image123.jpg”时,无法在 Android 上加载图像。在 iOS 上,这是可行的,因为我有一个处理 SSL 连接的自定义 NSUrlProtocol。

var image = new Image();

//will use ImageLoaderSourceHandler
image.Source = "https://blabla.com/upload/image123.jpg";

如果是 WebClient,我将 X509Certificate2(私钥和密码)附加到 HttpWebRequest.ClientCertificates 并且它可以工作。但是我不知道如何向 ImageLoaderSourceHandler 背后的任何加载机制提供该证书。

我怎样才能在 Android 上运行它?

最佳答案

所以我最终设置了自己的 SecuredUriImageSource:

var image = new Image();

//will use SecuredImageLoaderSourceHandler
image.Source = new SecuredUriImageSource ("https://blabla.com/upload/image123.jpg");

它使用此自定义处理程序加载图像,而 WebClientEx 将实际证书附加到连接。

[assembly: ExportImageSourceHandler(typeof(SecuredUriImageSource), typeof(SecuredImageLoaderSourceHandler))]
namespace Helpers
{
public class SecuredUriImageSource : ImageSource
{
public readonly UriImageSource UriImageSource = new UriImageSource();

public static SecuredUriImageSource FromSecureUri(Uri uri)
{
var source = new SecuredUriImageSource ();

source.UriImageSource.Uri = uri;

return source;
}
}

public class SecuredImageLoaderSourceHandler : IImageSourceHandler
{
public async Task<Bitmap> LoadImageAsync(ImageSource imagesource, Android.Content.Context context, CancellationToken cancelationToken = default(CancellationToken))
{
var imageLoader = imagesource as SecuredUriImageSource;

if (imageLoader != null && imageLoader.UriImageSource.Uri != null)
{
var webClient = new WebExtensions.WebClientEx();
var data = await webClient.DownloadDataTaskAsync(imageLoader.UriImageSource.Uri, cancelationToken).ConfigureAwait(false);
using (var stream = new MemoryStream(data) )
return await BitmapFactory.DecodeStreamAsync(stream).ConfigureAwait(false);
}

return null;
}
}
}

关于image - 带有 SSL 的 Xamarin.Forms Image.Source,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41160918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com