代码之家  ›  专栏  ›  技术社区  ›  Martin Liversage

在Silverlight中使用WebClient.BaseAddress获取基本url的替代方法

  •  2
  • Martin Liversage  · 技术社区  · 15 年前

    在Silverlight应用程序中,我有时需要连接到承载应用程序的网站。为了避免在Silverlight应用程序中硬编码网站,我使用如下代码:

    WebClient webClient = new WebClient();
    Uri baseUri = new Uri(webClient.BaseAddress);
    UriBuilder uriBuilder = new UriBuilder(baseUri.Scheme, baseUri.Host, baseUri.Port);
    // Continue building the URL ...
    

    创建一个 WebClient

    4 回复  |  直到 15 年前
        1
  •  9
  •   theahuramazda    15 年前

    我用,

    Uri baseUri = new Uri(Application.Current.Host.Source, "/");
    // Example results:
    //  http://www.example.com:42/
    //  or
    //  https://www.example.com/
    

    不需要字符串解析!

    Uri logoImageUri = new Uri(Application.Current.Host.Source, "/images/logo.jpg");
    // Example result:
    //  http://www.example.com/images/logo.jpg
    
        2
  •  9
  •   Martin Liversage    14 年前

    Application.Current.Host.Source 检索XAP的URI。

        3
  •  0
  •   Scott Marlowe    15 年前

    这将在ASP.NET中生成根url。然后需要通过Silverlight的InitParams传入baseUrl,并添加“ClientBin\Silverlight.xap”。

    // assemble the root web site path
    var baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd ('/') + '/';
    
        4
  •  0
  •   Nasenbaer    14 年前

    就我而言,我不是在主文件夹中工作。我在h|p://localhost:1234/子文件夹中工作。在VisualStudioIDE中工作时,这没有问题。但当移动到服务器时,它会失败。下面几行

    Application.Current.Host.Source
    

    可以通过公共函数替换,结果如下:

    Public Sub AppPathWeb()
        Res = Application.Current.Host.Source.AbsoluteUri.Substring(0, Application.Current.Host.Source.AbsoluteUri.LastIndexOf("/") + 1)
        Return New Uri(Res) 
    End Sub
    

    因此,我可以像这样捕获我的文件

    MyImage = New Uri(AppPathWeb, "HelloWorld.jpg")
    

    结果是,在服务器上,url转到h | | p://mydomain.com/mysubfolder/HelloWorld.jpg“

    祝你好运

    戈登格尔