2009-07-24 3 views
2

In einer Silverlight-Anwendung muss ich manchmal eine Verbindung zur Website herstellen, auf der die Anwendung gehostet wird. Um zu vermeiden, harte Kodierung der Website in meiner Silverlight-Anwendung verwende ich Code wie folgt:Alternativen zur Verwendung von WebClient.BaseAddress zum Abrufen der Basis-URL in 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 ... 

Es fühlt sich sehr klobig eine WebClient Instanz zu erstellen, Zugriff auf die URL der XAP-Datei zu erhalten. Gibt es Alternativen?

Antwort

9

Application.Current.Host.Source ruft den URI des XAP ab.

+2

ACHTUNG: in meiner Erfahrung nicht wie erwartet funktionieren, wenn Sie Ihre XAP-Datei zu .ZIP umbenennen (um um Hosting-MIME-Typ Einschränkungen). Nur etwas zu beachten - Weitere Informationen hier gebloggt http://conceptdev.blogspot.com/2009/03/xap-zip-silverlight-gets-confused.html – Conceptdev

0

Dies wird die Stamm-URL in ASP.NET erstellen. Sie müssten dann baseUrl über Silverlight's InitParams übergeben und "ClientBin \ silverlight.xap" hinzufügen.

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

Ihr Code sieht aus wie ASP.NET Server-Side-Code. Meine Frage bezieht sich darauf, wie die Basis-URL in der Silverlight-Anwendung auf der Clientseite abgerufen wird. –

+0

Sie haben Recht. Ich fügte etwas Klärung hinzu. Der andere Vorschlag funktioniert, gibt Ihnen jedoch die URL des Silverlight-Steuerelements und nicht die Basis-URL der Site. Hängt davon ab, welche Sie wollen und wie viel Parsing Sie machen wollen. –

9

Ich verwende,

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

Keine Saite benötigt Parsen! Sie können auch diese Methode verwenden, um vollständigen URLs zu erstellen, zum Beispiel

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

In meinem Fall, ich arbeite nicht im Hauptordner. Ich arbeite in h || p: // localhost: 1234/Unterordner. Das ist kein Problem während der Arbeit in Visual Studio IDE. Aber beim Wechsel zum Server schlägt es fehl. Die folgenden Zeilen

Application.Current.Host.Source 

kann durch eine öffentliche Funktion mit Ergebnis wie folgt ersetzt:

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

Als Ergebnis, kann ich meine Dateien wie diese

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

Und das Ergebnis fangen ist , dass auf dem Server die URL zu h || p: //mydomain.com/mysubfolder/HelloWorld.jpg geht "

Gut

Glück

goldengel.ch