【问题标题】:Using C#, how can I set a Url property to an HTML file in my project?使用 C#,如何在我的项目中将 Url 属性设置为 HTML 文件?
【发布时间】:2009-01-08 18:28:56
【问题描述】:

我有以下代码:

if (System.IO.File.Exists(htmlLocation))
{
    vEarthBrowser.ObjectForScripting = this;
    vEarthBrowser.Url = new Uri(htmlLocation);
}
else
{
    throw new Exception("HTML file not found!");
}

htmlLocation定义为:

private string htmlLocation = "VirtualEarth.html"

据推测,我从中获得此项目的项目处于正常工作状态,但我没有更改任何代码。如果我运行它,新的 Uri() 行会给我一个错误,“无效的 URI:无法确定 URI 的格式。”

文件存在(通过成功通过 If 中的 Exists() 方法表明)。当您希望 WebBrowser 控件在默认应用程序目录中加载 HTML 文件时,在 WebBrowser 控件上引用 URL 的正确方法是什么?

编辑:

我应该澄清一下,这是一个 winforms 项目,而不是一个 web 项目。

【问题讨论】:

  • 试试new Uri(htmlLocation,UriKind.Relative)
  • 试过这个...得到一个例外,“导航到相对 URL 不成功。”

标签: c# url


【解决方案1】:

尝试将 htmlLocation 传递给 Path.GetFullPath()。

这会自动返回当前 exe 目录中文件的绝对路径。

这是我编写的辅助函数:

public void LoadPageFromDisk(string filePath)
{
    Uri targetPage = null;

    string workingPageURI = filePath.Trim();

    workingPageURI = Path.GetFullPath(workingPageURI);

    if (Uri.TryCreate(workingPageURI, UriKind.RelativeOrAbsolute, out targetPage) == true)
    {

        webBrowserControl.Navigate(targetPage);
    }

}

如果 filePath 参数是“localfile.htm”,Path.GetFullPath 将根据当前正在执行的程序集返回它的绝对路径,例如:c:\Program Files\MyApp\localFile.htm。

然后 Uri.TryCreate 为您将绝对文件路径转换为有效的 file:// Uri。

最后,WebBrowser.Navigate 有一个接受 Uri 的重载。 (需要 UriKind.RelativeOrAbsolute 才能让 TryCreate 正确解析绝对文件路径。)

【讨论】:

    【解决方案2】:

    Uri 不处理这样的相对路径。对于驱动器上的文件,您需要使用 file:// 格式来创建 URI。将它与 Path.GetFullPath() 结合起来,你应该离开了。

    【讨论】:

    • 我对这个答案投了赞成票,但将另一个标记为答案,因为两者都是正确的,但另一个有 UriKind.RelativeOrAbsolute 这让我再次头疼。
    • 而且比较完整,所以值得肯定;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2023-02-08
    相关资源
    最近更新 更多