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

时间:2009-07-24 14:52:53

标签: silverlight url webclient

在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实例只是为了访问XAP文件的URL感觉非常笨拙。还有其他选择吗?

4 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:9)

我用,

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

不需要字符串解析! 您也可以使用此方法创建完整的Url,例如

Uri logoImageUri = new Uri(Application.Current.Host.Source, "/images/logo.jpg");
// Example result:
//  http://www.example.com/images/logo.jpg

答案 2 :(得分:0)

这将在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 ('/') + '/';

答案 3 :(得分:0)

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

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“

祝你好运

goldengel.ch