Ich rolle oft meine eigenen Wrapper/Extension-Methoden für/um System.Uri und fragte mich, ob jemand eine gute Open-Source-Implementierung kennt. Was ich am liebsten mache, ist das Parsen von Querystring-Parametern, das Erstellen einer neuen Query-Zeichenfolge (dies ist der Schlüssel) und das Ersetzen von Seitennamen. Hast du irgendwelche guten, oder ist System.Uri gut genug für dich?C# Url Builder Klasse
Antwort
BradVins QueryString Builder Klasse ist gut. Fließende Schnittstelle und Unterstützung für die Verschlüsselung.
Es lohnt sich auch, diese UrlBuilder Klasse auf CodeProject zu überprüfen. Ähnlich wie System.UriBuilder hat bessere Unterstützung für die Arbeit mit dem QueryString.
Wir benutzen unsere eigene alternative Uri-Klasse, die teilweise auf Uri basiert, wie Sie sagen. Ich denke jedoch, dass eine wichtige Unterscheidung zu treffen ist - System.Uri soll im Allgemeinen unveränderlich sein - oder, genauer gesagt, sich unveränderlich verhalten. Sobald es einmal existiert, stellt es einen präzisen universellen Standort-/Ressourcenendpunkt dar. Wenn Sie einen anderen Ort beschreiben müssen, sollten Sie einen neuen Uri erstellen und den vorhandenen nicht ändern.
Es gibt eine separate Klasse, die sich auf die Herstellung von Uri spezialisiert hat: UriBuilder.
Ich bin mir nicht sicher, was genau Sie versuchen zu tun (Beispiele würden helfen), aber es klingt wie Sie versuchen, einige der Funktionen von Apache mod_rewrite in ASP.NET zu bekommen.
Es gibt an article at MSDN über genau dies.
Zwischen System.Uri
und System.UriBuilder
, welche Funktionen genau fehlt Ihnen von diesen beiden?
Uri ist unveränderlich wie Rex M geklärt. Aber ich wusste nicht einmal von UriBuilder. Will hineinschauen. – Trent
Es gibt ein sehr nettes neues Open-Source-Projekt auf CodePlex, das Ihnen erlaubt, zu lesen, zu schreiben, Uris und ein bisschen mehr zu verschlüsseln. Schau sie dir an!
/// <summary>
/// The arguments must be like: varName1, varValue1, varName2, varValue2 and so on.
/// Empty names will be not be added to the result.
/// Returns a string of the form varName1=varValue1&varName2=varValue2...
/// </summary>
public static string BuildQueryString(params string[] strings)
{
Debug.Assert(0 == strings.GetLength(0) % 2);
StringBuilder builder = new StringBuilder(50);
bool isName = true;
bool isEmptyName = false;
foreach (string crtString in strings)
{
isEmptyName = (isName && string.IsNullOrEmpty(crtString)) ||
(!isName && isEmptyName);
if (!isEmptyName)
{
builder.Append(HttpUtility.UrlEncode(crtString));
if (isName)
builder.Append("=");
else
builder.Append("&");
}
isName = !isName;
}
return builder.ToString();
}
Flurl [Offenlegung: Ich bin der Autor] ist ein fließender URL-Builder, der wie folgt aussieht:
var url = "http://www.some-api.com"
.AppendPathSegment("endpoint")
.SetQueryParams(new {
api_key = ConfigurationManager.AppSettings["SomeApiKey"],
max_results = 20,
q = "Don't worry, I'll get encoded!"
});
Wenn Sie zufällig zu bauen URLs für den Zweck zu ruft sie, Flurl.Http ist eine begleitende Lib, die Sie HTTP aus der fließenden Kette machen können:
await "https://api.mysite.com"
.AppendPathSegment("person")
.SetQueryParams(new { ap_key = "my-key" })
.WithOAuthBearerToken("MyToken")
.PostJsonAsync(new { first_name = firstName, last_name = lastName });
Holen Sie sich das komplette Paket auf NuGet:
PM> Install-Package Flurl.Http
oder nur die Stand-alone-URL Builder:
PM> Install-Package Flurl
- 1. Objective C-Klasse Kategorie in Interface Builder
- 2. jquery URL Builder/Parser
- 3. Gebäude URL URI-Builder
- 4. MySQL Query Builder PHP-Klasse
- 5. Threads in C++ Builder
- 6. Builder-Muster, Vorlagen und verschachtelte Klasse
- 7. Builder für URL-Erstellung/Abfrage in Go
- 8. Konnte Klasse nicht finden android.support.v4.app.NotificationCompat $ Builder
- 9. UIView-Klasse in Interface Builder aktualisieren
- 10. So generieren Sie eine Builder-Klasse
- 11. Unbekannte Klasse FirstViewController in Interface Builder-Datei
- 12. Builder Entwurfsmuster - Keine abstrakte Klasse/Schnittstelle
- 13. Builder in Java gegen C++?
- 14. Delphi C++ Builder zu VisualStudio
- 15. C++ Builder: Speicherort der Bitmap
- 16. C++ Builder: JAR-Dateien einbinden
- 17. C# Prädikat Builder funktioniert nicht
- 18. Parser Builder für C# /. NET
- 19. OmniThreadLibrary C++ Builder Build-Probleme
- 20. C++ Builder-Paket exportieren Linkfehler
- 21. C++ Builder XE2, TXMLDocument 'DTD ist verboten'
- 22. URL meiner Java-Klasse
- 23. C++ Builder XE - publishing Array-Eigenschaft
- 24. Gibt es Richtlinien zum Aktualisieren von C++ Builder-Anwendungen für C++ Builder 2009?
- 25. C/C++ URL-Dekodierbibliothek
- 26. Yahoo Pipes: URL Builder item.link in RSS Artikel Builder Module anpassen
- 27. Portierung von Borland C++ Builder auf Qt
- 28. C# Bot Builder SDK - Ansatz für Disambiguierung
- 29. Direct2D nur teilweises Verknüpfen in C++ Builder
- 30. Embarcadero C++ Builder + FireMoneky vs Qt
Kudos zu dieser Antwort. Das ist fast wortwörtlich, wo ich seit Jahren rolle. Ich mag den UriBuilder nicht, weil ich mehr Funktionalität zum dynamischen Hinzufügen von qs-Parametern haben möchte. – Trent