2010-09-28 2 views
3

Итак, я полный noob для C#. У меня есть URL-адрес, который мне нужно кодировать, чтобы использовать urlencoded сообщения.Полный C# noob, VS2010, не может использовать HttpServerUtility.UrlEncode?

Проблема: каждый найденный ресурс говорит, что использует System.Web.HttpServerUtility.UrlEncode. В качестве альтернативы, я видел ресурсы, сообщающие мне использовать System.Web.Util.HttpEncoder().

Я добавил ссылку на system.web, но получаю «не существует в пространстве имен system.web» и «не существует в системном пространстве имен system.web.util».

Любые советы были бы хороши!

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

Вы злоупотребляя 'UrlEncode'. Используйте его для кодирования значений данных в параметрах запроса. – SLaks

+1

Когда вы говорите, что вы «добавили ссылку на system.web», вы уверены, что не просто добавили в свой код 'using System.Web'? Вам нужно добавить ссылку на сборку (DLL). (щелкните правой кнопкой мыши по вашему проекту, добавьте ссылку) –

ответ

5

Вы, возможно, потребуется добавить ссылку на System.Web сборки вашего проекта:

alt text

+0

Скриншот на самом деле ему не поможет, так как диалог «добавить ссылку» полностью отличается от VS2010 (если только он не использует версию Express) –

+2

Обновлен скриншот с VS 2010. Не так много разные в конце концов. На самом деле основное отличие невидимо на скриншоте. Это в скорости. Вам больше не нужно пить пять кофе, прежде чем увидеть это окно на предыдущих версиях Visual Studio (спасибо Microsoft). –

6

Скорее всего, вы используете .NET 4 Client Profile, который не включает в себя System.Web.dll - или вы просто не добавили ссылку на него. Если вы перейдете к свойствам проекта, в разделе «Приложение» выберите «.NET Framework 4» в качестве целевой структуры, а не «Профиль клиента .NET Framework 4». Затем вы можете добавить ссылку на сборку System.Web.

(Обратите внимание, что сборка не такой же, как пространство имен. Ссылки на сборки добавляются в проект, в то время как вы обычно «добавить» пространств имен в виде отдельного файла с using директивами сверху. У вас уже есть using директивы для System.Web пространства имен, но это не поможет вам использовать HttpServerUtility без ссылки на System.Web сборки.)

в качестве альтернативы, в зависимости от ваших конкретных требований , вы могли бы использовать Uri.EscapeDataString или Uri.EscapeUriString. Оба они доступны в профиле клиента. Это немного раздражает, что существует так много различных способов сделать это - это может быть сложно выбрать правильный :(

+0

Вот и все! Спасибо, после смены профиля клиента на .NET Framework 4 все прошло гладко. Еще раз спасибо! –

1

Я считаю, что вы сделали не добавить ссылку на System.Web.dll

. Ссылки и импорт пространства имен - это разные вещи. Пространство имен - это способ группировки связанных классов вместе, поэтому все классы, связанные с коллекциями, находятся в System.Collections, все материалы Windows Forms находятся в System.Windows.Forms, и вы также можете организовать проект для разделения бизнес-логики, представления и доступа к данным в разных пространствах имен.

пространства имен являются чисто логическими. Вы можете создавать несколько библиотек, которые добавляют классы к тем же пространствам имен, и вы также можете использовать несколько пространств имен в одном проекте.

Вы импортировали system.web имен здесь с использованием заявления:

using System.Web; 

Это означает только то, что вместо того, чтобы получить доступ к классу его полное имя, System.Web.HttpUtility, вам может написать только HttpUtility, и компилятор выведет, что вы имеете в виду System.Web.

Однако для приложений Windows сама библиотека , называемая System.Web.dll, по умолчанию не ссылается. Это означает, что ни один из классов System.Web даже не известен компилятору прямо сейчас.

Чтобы добавить ссылку на физический файл библиотеки, щелкните правой кнопкой мыши на проекте Ссылки папки, выберите 'Add Reference ...' и выбрать System.Web.dll.

И, опять же, пространства имен - это всего лишь логические группировки, сборки - это физические файлы на вашем жестком диске.

Успехов, Dan

 Смежные вопросы

  • Нет связанных вопросов^_^