Quiero hacer una cadena en una URL usando C #. Debe haber algo en el framework .NET que debería ayudar, ¿no?
Creo que estás buscando HttpServerUtility.UrlEncode .
System.Web.HttpUtility.UrlEncode(string url)
Otra forma de hacerlo es usar Uri.EscapeUriString(stringToEscape)
.
Encontré útil System.Web.HttpUtility.UrlPathEncode(string str);
Reemplaza espacios con% 20 y no con +.
Para escaparse correctamente de los espacios, así como del rest de los caracteres especiales, use System.Uri.EscapeDataString(string stringToEscape)
.
Como se comentó en la historia aprobada, el método HttpServerUtility.UrlEncode reemplaza espacios con + en lugar de% 20. Utilice uno de estos dos métodos en su lugar: Uri.EscapeUriString () o Uri.EscapeDataString ()
Código de muestra:
HttpUtility.UrlEncode("https://mywebsite.com/api/get me this file.jpg") //"https%3a%2f%2fmywebsite.com%2fapi%2fget+me+this+file.jpg" Uri.EscapeUriString("https://mywebsite.com/api/get me this file.jpg"); //"https://mywebsite.com/api/get%20me%20this%20file.jpg" Uri.EscapeDataString("https://mywebsite.com/api/get me this file.jpg"); //"https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%20me%20this%20file.jpg" //When your url has a query string: Uri.EscapeUriString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg"); //"https://mywebsite.com/api/get?id=123&name=get%20me%20this%20file.jpg" Uri.EscapeDataString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg"); //"https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%3Fid%3D123%26name%3Dget%20me%20this%20file.jpg"
Use HttpServerUtility.UrlEncode
HttpUtility.UrlEncode Method (String)
Necesitaba hacer esto también, encontré esta pregunta de hace años pero el título y el texto de la pregunta no coinciden del todo, y usar Uri.EscapeDataString
o UrlEncode
(¡no lo use, por favor!) No tiene sentido a menos que nosotros lo hagamos. están hablando de pasar URL como parámetros a otras URL.
(Por ejemplo, pasar una URL de callback al hacer una autenticación de ID abierta, Azure AD, etc.)
Esperando que esta sea una respuesta más pragmática a la pregunta: quiero hacer una cadena en una URL usando C #, debe haber algo en el framework .NET que pueda ayudar, ¿no?
Sí , dos funciones son útiles para crear cadenas de URL en C #
String.Format
para formatear la URL Uri.EscapeDataString
para escapar de cualquier parámetro en la URL Este código
String.Format("https://site/app/?q={0}&redirectUrl={1}", Uri.EscapeDataString("search for cats"), Uri.EscapeDataString("https://mysite/myapp/?state=from idp"))
produce este resultado
https://site/app/?q=search%20for%20cats&redirectUrl=https%3A%2F%2Fmysite%2Fmyapp
Que se puede copiar y pegar de forma segura en la barra de direcciones de un navegador, o el atributo src
de una etiqueta HTML A
, o usarse con curl
, o codificarse en un código QR, etc.
El código a continuación reemplazará la repetición de espacio con un solo carácter% 20.
Ejemplo:
La entrada es:
Code by Hitesh Jain
Salida:
Code%20by%20Hitesh%20Jain
static void Main(string[] args) { Console.WriteLine("Enter a string"); string str = Console.ReadLine(); string replacedStr = null; // This loop will repalce all repeat black space in single space for (int i = 0; i < str.Length - 1; i++) { if (!(Convert.ToString(str[i]) == " " && Convert.ToString(str[i + 1]) == " ")) { replacedStr = replacedStr + str[i]; } } replacedStr = replacedStr + str[str.Length-1]; // Append last character replacedStr = replacedStr.Replace(" ", "%20"); Console.WriteLine(replacedStr); Console.ReadLine(); }
HttpServerUtility.HtmlEncode
De la documentación:
String TestString = "This is a ."; String EncodedString = Server.HtmlEncode(TestString);
Pero esto en realidad codifica HTML, no URL. En su lugar, use UrlEncode (TestString) .