A menudo termino rodando mis propios métodos de envoltura/extensión para/alrededor de System.Uri y me preguntaba si alguien sabe de una buena implementación de código abierto. Lo que más me gusta hacer es analizar los parámetros de la cadena de consulta, crear una nueva cadena de consulta (esta es la clave) y reemplazar los nombres de las páginas. ¿Tienes algunos buenos, o System.Uri es lo suficientemente bueno para ti?C# Url Builder Class
Respuesta
La clase de BradVin QueryString Builder es buena. Interfaz fluida y soporte para cifrado.
También vale la pena echarle un vistazo a esta clase de UrlBuilder en CodeProject. Similar a System.UriBuilder tiene mejor soporte para trabajar con QueryString.
Usamos nuestra propia clase de Uri alternativa que se basa parcialmente en Uri, como dices. Sin embargo, creo que hay una distinción importante que hacer: System.Uri generalmente está destinado a ser inmutable, o más precisamente, comportarse de manera inmutable. Una vez que se crea, representa un punto final de ubicación/recurso universal preciso. Si necesita describir una ubicación diferente, debe crear un Uri nuevo, no cambiar el existente.
Hay una clase separada que se especializa en producir Uri's: UriBuilder.
No estoy seguro exactamente de lo que está tratando de hacer (los ejemplos ayudarían) pero parece que está tratando de obtener algunas de las funcionalidades de mod_rewrite de Apache en ASP.NET.
Hay an article at MSDN exactamente sobre esto.
Entre System.Uri
y System.UriBuilder
, ¿qué características le falta exactamente a esas dos?
Uri es inmutable como Rex M aclaró. Pero ni siquiera sabía sobre UriBuilder. Lo investigaré. – Trent
Hay un muy buen nuevo proyecto de código abierto en CodePlex que le permite leer, escribir, encriptar Uris y un poco más. Échales un vistazo!
/// <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 [divulgación: Soy el autor] es un constructor de URL fluidez que tiene este aspecto:
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!"
});
Si quieres pasar a ser la construcción de las direcciones URL con el propósito de llamándolos, Flurl.Http es una lib complementaria que le permite hacer HTTP fuera de la cadena fluida:
await "https://api.mysite.com"
.AppendPathSegment("person")
.SetQueryParams(new { ap_key = "my-key" })
.WithOAuthBearerToken("MyToken")
.PostJsonAsync(new { first_name = firstName, last_name = lastName });
obtener el paquete completo en NuGet:
PM> Install-Package Flurl.Http
o simplemente el autónomo de creación de URL:
PM> Install-Package Flurl
- 1. jquery url builder/parser
- 2. Hilos en C++ Builder
- 3. C++ Matrix Class
- 4. C# Singleton Logging Class
- 5. Delphi C++ Builder a VisualStudio
- 6. C# Calling Base Class Constructor
- 7. C# code to class diagram
- 8. Objective C class definition confusion
- 9. C# Class Incremento automático ID
- 10. C++ class object memory map
- 11. ¿Existen directrices para actualizar las aplicaciones de C++ Builder para C++ Builder 2009?
- 12. Django - Class Based vista genérica - "No URL para redirigir a"
- 13. Django Class Based Generic Views URL Variable Pasando
- 14. Componentes en Delphi y C++ Builder?
- 15. Comprender TBitmap.Scanline en Delphi & C++ Builder
- 16. Portando Borland C++ Builder a Qt
- 17. Cómo crear un objeto JSON simple usando C# string Builder
- 18. struct and class and inheritance (C++)
- 19. C++ Auto Class Implementación en el Editor
- 20. Problema de compilación en C++; class methods
- 21. ¿Qué hace @class en Objective-C?
- 22. ¿Cómo probar la unidad Singleton class - C++?
- 23. ¿Qué es Proxy Class en C++
- 24. Patrón Jackson + Builder?
- 25. Regex Query Builder
- 26. Online Exe Builder
- 27. ASP.NET Cache class vs. MemoryCache class
- 28. ¿Por qué "[self class] == [super class]"?
- 29. ¿Qué significa la plantilla <class key, class type> mean before a method in C++?
- 30. C# Comprobar URL existen?
Felicitaciones por esta respuesta. Esto es casi textualmente con lo que he estado rodando durante años. No me gusta el UriBuilder porque quiero más funcionalidad para agregar dinámicamente parámetros qs. – Trent