Альтернативы использованию WebClient.BaseAddress для получения базового URL-адреса в Silverlight

В приложении 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 только для того, чтобы получить доступ к URL-адресу XAP-файла, кажется очень неуклюжим. Есть ли альтернативы?


person Martin Liversage    schedule 24.07.2009    source источник


Ответы (4)


Application.Current.Host.Source извлекает URI XAP.

person Ben M    schedule 24.07.2009
comment
ВНИМАНИЕ: по моему опыту, это не работает должным образом, если вы переименовываете файл .XAP в .ZIP (чтобы обойти ограничения типа MIME). Просто кое-что, о чем следует знать — дополнительная информация опубликована здесь conceptdev .blogspot.com/2009/03/ - person Conceptdev; 28.07.2009

Я использую,

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
person theahuramazda    schedule 30.10.2009

Это создаст корневой URL-адрес в ASP.NET. Затем вам нужно будет передать baseUrl через InitParams Silverlight и добавить «ClientBin\silverlight.xap».

// assemble the root web site path
var baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd ('/') + '/';
person Scott Marlowe    schedule 24.07.2009
comment
Ваш код выглядит как код на стороне сервера ASP.NET. Мой вопрос о том, как получить базовый URL-адрес в клиентском приложении Silverlight. - person Martin Liversage; 24.07.2009
comment
ты прав. Я добавил некоторые уточнения. Другое предложение работает, но дает вам URL-адрес элемента управления Silverlight, а не базовый URL-адрес сайта. Зависит от того, какой из них вы хотите, и сколько разбора вы хотите сделать. - person Scott Marlowe; 24.07.2009

В моем случае я не работаю в основной папке. Я работаю в h||p://localhost:1234/subfolder. Это не проблема при работе в 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"

Удачи

золотойгель.ch

person Nasenbaer    schedule 29.06.2010