Meine Zielprojekte sind Windows 8, WinRT und Windows Phone 8. Ich verwende Portable Class Libraries für die Lösung, um die Quellen zu teilen. Ich muss einige REST-Dienste aufrufen, die in einem anderen MVC Web API-Projekt erstellt wurden, aber die Klasse HttpClient
ist in der PCL nicht verfügbar. Was wäre ein guter Ansatz, um es zu lösen? Ich dachte in einer Service-Schnittstelle und dann ein Projekt für jede Plattform zu erstellen, mit HttpClient
, WebClient
oder die entsprechende Klasse in jedem Fall. Dieser Ansatz könnte funktionieren, aber ich frage mich, ob es andere Wege gibt.Wie REST-Dienste von Portable Class Library aufgerufen werden?
Antwort
HttpClient ist aus Microsoft Sicht nicht unbedingt portierbar. Die einzige andere Möglichkeit besteht darin, separate Bibliotheken zu erstellen, die von jedem Projekt implementiert werden, und wie Sie es beschrieben haben. Auf diese Weise können Sie auf allen Plattformen, die Sie anvisieren möchten, eine gemeinsame Lösung erreichen.
Ich dachte, es gab ein gewisses Maß an Gleichwertigkeit, wenn es um die Plattformen ging, die Sie anvisieren ... Wenn Sie separate Projekte haben, könnten Sie Ihre Code-Dateien mit dem anderen Projekt verknüpfen, so dass Sie nicht warten müssen mehrere Projekte, oder verwenden Sie sogar Project Linker (obwohl ich nicht weiß, ob eine 2012-Version existiert).
Hinweis: Project Linker existiert für 2012: http: // Visualstudiogallery .msdn.microsoft.com/273dbf44-55a1-4ac6-a1f3-0b9741587b9a –
Tragbare REST hat auf GitHub seit kurzem verfügbar und soll zu machen Web-Anfragen gegeben helfen, dass WebClient ist nicht verfügbar:
https://github.com/advancedrei/PortableRest#readme
PortableRest ist eine Portable Klassenbibliothek zur Implementierung REST API Kunden in anderen Tragbarer Klassenbibliotheken Es nutzt JSON.NET für schnelle, anpassbare Serialisierung, sowie die Microsoft.Bcl.Async Bibliothek für die erwartete Ausführung auf jeder Plattform. Es ist entworfen, um weitgehend Drop-in kompatibel mit RestSharp sein, obwohl Sie müssen einige Änderungen vornehmen und neu kompilieren.
Diese erste Version hat eingeschränkte Unterstützung für einfache JSON-Anforderungen. Weitere Optionen (einschließlich XML und hoffentlich DataContract-Unterstützung) werden in späteren Versionen verfügbar sein.
Microsoft hat rewritten the HttpClient
library to be portable (PCL) und es ist here on NuGet.
Momentan ist es nur als Vorabversion verfügbar. Wenn Sie den NuGet GUI Package Manager verwenden, stellen Sie sicher, dass Sie "Prereelease einbeziehen" auswählen.
in der Befehlszeile:
Install-Package Microsoft.Net.Http
ziemlich spät, aber hier ein einfacher Code ist was ich tun musste, ist PLC außer XBox 360 für alles gezielt (könnte funktionieren auch). Ich konnte HttpClient nicht für diese Zielliste verwenden.
public class WebDownload
{
public class WebDownloadResult
{
public HttpStatusCode StatusCode { get; set; }
public int StatusCodeNumber { get; set; }
public bool ErrorOccured { get; set; }
public string ResultString { get; set; }
}
public static void Download(string url, Action<WebDownloadResult> resultAction)
{
WebDownloadResult response = new WebDownloadResult();
try
{
HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(url);
IAsyncResult result = (IAsyncResult)myHttpWebRequest.BeginGetResponse(new AsyncCallback(delegate(IAsyncResult tempResult)
{
HttpWebResponse webResponse = (HttpWebResponse)myHttpWebRequest.EndGetResponse(tempResult);
Stream responseStream = webResponse.GetResponseStream();
using (StreamReader reader = new StreamReader(responseStream, Encoding.UTF8))
{
response.ResultString = reader.ReadToEnd();
response.StatusCode = webResponse.StatusCode;
response.StatusCodeNumber = (int)webResponse.StatusCode;
if (resultAction != null) resultAction(response);
}
}), null);
}
catch
{
response.ErrorOccured = true;
if (resultAction != null) resultAction(response);
}
}
}
danke Mann, das ist das einzige, was ich in meinem PCL-Projekt arbeiten konnte. darüber nachzudenken, einen REST-Client darauf zu bauen ..... – skhro87
Das ist genial! Ich bin persönlich nicht sehr erfahren mit C# und PCL im Allgemeinen, also gibt es jemanden da draußen, der mir sagen könnte, wie ich den "resultAction" Rückgabetyp behandeln soll?Ich muss auf den "ResultString" außerhalb der "Download" -Methode zugreifen, um die erhaltene Antwort zu parsen. Vielen Dank im Voraus. – Demitrian
- 1. Portable Class Library Reflection
- 2. Portable Class Library Testing
- 3. .NET Portable Class Library und UDP-Unterstützung
- 4. Zugriff auf Klassen in Portable Class Library
- 5. mit Json in der Portable Class Library
- 6. Wie binäre Serialisierung einer Klasse in einer Portable Class Library?
- 7. Wie lese ich eine Ressourcendatei in einer Portable Class Library?
- 8. Was passiert mit .ToShortDateString in. NET Portable Class Library
- 9. Referenz Azure-Tabellenspeicher in einer Portable Class Library (PCL)
- 10. Portable Class Library Assembly Referenz Probleme in MonoDroid und MonoTouch
- 11. Jedes Protokollierungs-Framework für die Portable Class Library?
- 12. Ich bekomme 403 mit HttpClient auf Portable Class Library
- 13. Base Class Library
- 14. Xamarin portable library - Wie teile ich Klassen?
- 15. Wie arbeite ich mit der Portable Class Library und dem EF-Code zuerst?
- 16. NUnit für Portable Class Bibliothekstests
- 17. Funktionieren Portable Class Libraries mit .net 3.5?
- 18. Spinwait für eine Reihe von Spins in der Portable Class Library
- 19. ConcurrentBag Alternative in Portable Class Bibliothek
- 20. Verweis auf eine PCL (Portable Class Library) von einem Xamarin Mono für Android-Projekt
- 21. Portable Class Library starke Probleme bei der Baugruppenreferenz in MonoTouch/MonoDroid
- 22. Warum kann ich Delegate.CreateDelegate nicht in meiner Portable Class Library aufrufen?
- 23. Der Versuch, EF Core mit Portable Class Library-Targeting zu installieren. Net 4.6.1
- 24. Erstellen eines Portable Class Library-Projekts im Build-Server schlägt fehl
- 25. "Datei oder Assembly kann nicht geladen werden System.Core, Version = 2.0.5.0, ..." Ausnahme beim dynamischen Laden der Portable Class Library
- 26. ViewModel-Unterstützung in der Portable Class-Bibliothek
- 27. Gibt es eine Möglichkeit, IValidatableObject in Portable Class Library Project zu implementieren?
- 28. Wie kann ich secannotate.exe erfolgreich in einer Bibliothek ausführen, die von einer Portable Class Library abhängig ist?
- 29. Kompilieren von Multi-Architektur-Code mit Agners Vector Class Library
- 30. Gibt es REST-Bibliotheken, die mit Portable Class Libraries funktionieren?
Mögliche doppelte: http://stackoverflow.com/questions/13547479/are-there-any-rest-libraries-out-there-that-work-with-portable-class-libraries –
http://blogs.msdn.com/b/dotnet/archive/2013/05/22/portable-httpclient-is-now-available-as-rc.aspx – SLaks