2010-09-28 28 views
3

Donc, je suis un noob complet à C#. J'ai une url que j'ai besoin d'encoder afin d'utiliser des messages urlencoded.Terminer C# noob, VS2010, ne peut pas utiliser HttpServerUtility.UrlEncode?

Le problème est, chaque ressource que j'ai trouvé dit d'utiliser System.Web.HttpServerUtility.UrlEncode. Alternativement, j'ai vu des ressources me disant d'utiliser System.Web.Util.HttpEncoder().

J'ai ajouté une référence à system.web, mais je reçois les erreurs "n'existe pas dans l'espace de noms system.web" et "n'existe pas dans l'espace de noms system.web.util".

Tous les conseils seraient bien!

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Net; 
using System.IO; 
using System.Web; 

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      string url = HttpUtility.UrlEncode("http://stackoverflow.com/"); 
      MessageBox.Show(url); 
     } 
    } 
} 
+0

Vous abusant 'UrlEncode'. Utilisez-le pour coder les valeurs de données dans les paramètres de chaîne de requête. – SLaks

+1

Lorsque vous dites que vous avez "ajouté une référence à system.web", êtes-vous sûr de ne pas avoir ajouté une clause 'using System.Web' à votre code? Vous devez ajouter la référence à l'assembly (DLL). (clic droit sur votre projet, ajouter une référence) –

Répondre

5

Vous pourriez avoir besoin d'ajouter une référence à l'Assemblée System.Web à votre projet:

alt text

+0

La capture d'écran ne l'aidera pas vraiment, puisque le dialogue "ajouter référence" est complètement différent dans VS2010 (sauf s'il utilise la version Express) –

+2

Mise à jour de capture d'écran avec VS 2010. Pas tellement différent après tout. En fait, la principale différence est invisible dans la capture d'écran. C'est dans la vitesse. Vous n'avez plus besoin de boire cinq cafés avant de voir cette fenêtre sur les versions précédentes de Visual Studio (merci Microsoft). –

6

Il y a des chances que vous utilisez le .NET 4 Client Profile, qui ne comprend pas System.Web.dll - ou vous n'avez simplement pas ajouté de référence. Si vous allez dans les propriétés du projet, sous "Application", sélectionnez ".NET Framework 4" comme framework cible plutôt que ".NET Framework 4 Client Profile". Vous devriez alors pouvoir ajouter une référence à l'assemblage System.Web.

(Notez que l'assemblée est pas même comme un espace de noms. Les références d'assemblage sont ajoutées à un projet, alors que vous en général « ajouter » à un fichier namespaces individuel avec using directives en haut. Vous avez déjà la directive using pour l'espace de noms System.Web, mais cela ne vous aidera à utiliser HttpServerUtility sans référence à l'assemblée System.Web.)

Sinon, en fonction de vos besoins exactes, vous pouvez utiliser Uri.EscapeDataString ou Uri.EscapeUriString. Les deux sont disponibles dans le profil client. Il est un peu ennuyeux qu'il ya tant de différentes façons de le faire - il peut être difficile de choisir le bon :(

+0

C'était tout! Merci, après avoir changé de Client Profile en .NET Framework 4, tout s'est bien passé. Merci encore! –

1

Je crois que vous avez fait pas ajouter la référence à System.Web.dll

. L'espace de noms est un moyen de regrouper des classes liées, de sorte que toutes les classes liées aux collections résident dans System.Collections, tous les éléments Windows Forms se trouvent dans System.Windows.Forms et vous pouvez également organiser votre projet visant à séparer la logique métier, la présentation et l'accès aux données dans différents espaces de noms

Cependant les espaces de noms sont purement logiques. Vous pouvez créer plusieurs bibliothèques qui ajoutent des classes aux mêmes espaces de noms et vous pouvez également utiliser plusieurs espaces de noms dans un même projet.

Vous avez importé espace de noms System.Web ici avec l'using:

using System.Web; 

Cela signifie seulement qu'au lieu d'accéder à la classe par son nom complet , System.Web.HttpUtility, vous peut écrire juste HttpUtility, et le compilateur déduira que vous voulez dire le System.Web.Toutefois, pour les applications Windows, la bibliothèque elle-même, appelée System.Web.dll, n'est pas référencée par défaut. Cela signifie qu'aucune des classes System.Web n'est encore connue du compilateur.

Pour ajouter une référence au fichier de bibliothèque physique, faites un clic droit sur le projet Références dossier, choisissez « Ajouter Référence ... » et choisissez System.Web.dll. Et, encore une fois, les espaces de noms ne sont que des regroupements logiques, les assemblys sont des fichiers physiques sur votre disque dur.

Bonne chance, Dan