我有一个数据:需要使用正常的.Net WebClient
/ “下载”(读取:作为流或字节数组加载)的URI WebRequest
。我怎样才能做到这一点?
我需要这样做是因为我想显示从SVG生成的XAML文件,其中包括一些使用数据的图像:URI。我不想总是解析XAML,将图像保存到磁盘,然后将XAML更改为指向文件。我相信WPF在WebRequest
内部使用这些图像。
您可以WebRequest.RegisterPrefix()
用来做到这一点。您将需要实现IWebRequestCreate
返回一个自定义的WebRequest
返回一个自定义的返回,该自定义WebResponse
最终可以用来从URI中获取数据。它可能看起来像这样:
public class DataWebRequestFactory : IWebRequestCreate
{
class DataWebRequest : WebRequest
{
private readonly Uri m_uri;
public DataWebRequest(Uri uri)
{
m_uri = uri;
}
public override WebResponse GetResponse()
{
return new DataWebResponse(m_uri);
}
}
class DataWebResponse : WebResponse
{
private readonly string m_contentType;
private readonly byte[] m_data;
public DataWebResponse(Uri uri)
{
string uriString = uri.AbsoluteUri;
int commaIndex = uriString.IndexOf(',');
var headers = uriString.Substring(0, commaIndex).Split(';');
m_contentType = headers[0];
string dataString = uriString.Substring(commaIndex + 1);
m_data = Convert.FromBase64String(dataString);
}
public override string ContentType
{
get { return m_contentType; }
set
{
throw new NotSupportedException();
}
}
public override long ContentLength
{
get { return m_data.Length; }
set
{
throw new NotSupportedException();
}
}
public override Stream GetResponseStream()
{
return new MemoryStream(m_data);
}
}
public WebRequest Create(Uri uri)
{
return new DataWebRequest(uri);
}
}
Run Code Online (Sandbox Code Playgroud)
这仅支持base64编码,但可以轻松添加对URI编码的支持。
然后,您可以像这样注册它:
WebRequest.RegisterPrefix("data", new DataWebRequestFactory());
Run Code Online (Sandbox Code Playgroud)
是的,这确实适用于检索数据:XAML文件中的图像。
归档时间: |
|
查看次数: |
1094 次 |
最近记录: |