我有一个WPF应用程序,它有一个显示图像,PDF或HTML网页的动态视图。我的应用程序访问Web服务以请求这些类型的文件,然后根据返回的mime类型,选择图像控件,pdf控件或WPF WebBrowser控件来呈现返回的数据。
使用图像和PDF,我可以检查mime类型,然后立即将结果中的字节数组传递给控件进行渲染。
但是,如果mime类型是HTML,那么我发现呈现html的唯一方法是将URL提供给Web浏览器控件的Navigate函数,这会导致对远程服务的第二次HTTP调用。如果可能,我被要求删除第二个请求。
我已经尝试将字节数组(e.Result)作为流传递给浏览器控件,但是,浏览器没有可引用的URL,因此无法解析相对链接的资源(如图像)。有什么方法可以将字节数组传递给Web浏览器,它仍然知道如何对相对链接的内容发出请求?
答案 0 :(得分:1)
由于WPF(和WinForms)浏览器的实现方式,你无法开箱即用。从流或字符串加载时,它们将始终具有" about:blank"的URL。我想到了实现目标的选择:
<base href="http://your_site.com" />
头部元素内的标签(如果不存在则创建头部):
string html;
string url = "http://google.com";
var r = (HttpWebRequest) WebRequest.Create(url);
using (var rs = r.GetResponse().GetResponseStream()) {
using (var reader = new StreamReader(rs, Encoding.UTF8)) {
html = reader.ReadToEnd();
}
}
// god forbid to do it like this, example only!
html = html.Replace("<head>", "<head><base href=\"" + url + "\"");
wb.NavigateToString(html);