Le signe plus est souvent décodé par .NET dans un espace avant d'avoir une chance d'appeler la méthode UrlDecode. J'utilise les méthodes d'extension de chaîne suivantes pour corriger le problème et fournir un meilleur accès et contrôle sur les paramètres de chaîne de requête.
/// <summary>
/// Character Encodes a (string). Specifically used for Querystring parameters.
/// </summary>
/// <remarks></remarks>
/// <param name="String"></param>
/// <returns>string</returns>
public static string EncodeForQueryString(this string String)
{
String = System.Web.HttpUtility.UrlEncode(String);
return String;
}
/// <summary>
/// Character Decodes a (string). Specifically used for Querystring parameters.
/// </summary>
/// <remarks>The plus sign causes issues when using System.Web.HttpUtility.UrlDeEncode. The plus sign is often decoded before it reaches this method. This method will replace any extra + with %2b before attempting to decode</remarks>
/// <param name="String"></param>
/// <returns>string</returns>
public static string DecodeForQueryString(this string String)
{
String = String.Replace("+", "%2b");
String = System.Web.HttpUtility.UrlDecode(String);
return String;
}
Pour créer la chaîne encodée pour votre valeur de paramètre querystring:
string myUrl = "myPage.htm?q=" + "Saving+Silverman".ToString().EncodeForQueryString();
Pour récupérer et décoder la valeur du paramètre querystring:
string myDecodedString = Request.Params["q"].DecodeForQueryString();
Vous devez * toujours * UrlEncode, pour des raisons de sécurité . –