2009-07-24 2 views
2

Dans une application Silverlight, j'ai parfois besoin de me connecter au site Web sur lequel l'application est hébergée. Pour éviter coder en dur le site Web dans mon application Silverlight J'utilise le code comme ceci:Alternatives à l'utilisation de WebClient.BaseAddress pour obtenir l'URL de base dans 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 ... 

Il se sent très maladroit de créer une instance WebClient juste pour avoir accès à l'URL du fichier XAP. Y a-t-il des alternatives?

Répondre

9

Application.Current.Host.Source récupère l'URI du fichier XAP.

+2

AVERTISSEMENT: dans mon expérience cela ne fonctionne pas comme prévu si vous renommez votre fichier .xap à .ZIP (pour contourner des restrictions d'hébergement de type MIME). Juste quelque chose à savoir - plus d'infos blog ici http://conceptdev.blogspot.com/2009/03/xap-zip-silverlight-gets-confused.html – Conceptdev

0

Cela va construire l'URL racine dans ASP.NET. Vous devrez alors passer en baseUrl via les InitParams de Silverlight et ajouter "ClientBin \ silverlight.xap".

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

Votre code ressemble à du code côté serveur ASP.NET. Ma question est sur la façon d'obtenir l'URL de base dans l'application côté client Silverlight. –

+0

vous avez raison. J'ai ajouté quelques précisions. L'autre suggestion fonctionne, mais vous donne l'URL du contrôle Silverlight, pas l'URL de base du site. Cela dépend de celui que vous voulez, et combien d'analyse vous voulez faire. –

9

J'utilise,

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

Aucune chaîne analyse syntaxique nécessaire! Vous pouvez également utiliser cette méthode pour créer une URL complète, par exemple,

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

Dans mon cas, je ne travaille pas dans le dossier principal. Je travaille dans h || p: // localhost: 1234/subfolder. Cela ne pose aucun problème lorsque vous travaillez dans Visual Studio IDE. Mais lors du déplacement vers le serveur, il échoue. Les lignes suivantes

Application.Current.Host.Source 

peuvent être remplacées par une fonction publique avec un résultat comme celui-ci:

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

Comme résultat, je peux attraper mes fichiers comme celui-ci

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

Et le résultat est , que sur le serveur l'URL va à h || p: //mydomain.com/mysubfolder/HelloWorld.jpg "

Bien chance

goldengel.ch

Questions connexes