Полный C # noob, VS2010, не может использовать HttpServerUtility.UrlEncode? - PullRequest
3 голосов
/ 28 сентября 2010

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

Проблема в том, что каждый найденный ресурс говорит об использовании 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);
        }
     }
}

Ответы [ 3 ]

6 голосов
/ 28 сентября 2010

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

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

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

5 голосов
/ 28 сентября 2010

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

alt text

1 голос
/ 28 сентября 2010

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

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

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

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

using System.Web;

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

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

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

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

Удачи, Дэн

...