1

Вопрос по asp.net, c# – Искусственное заполнение объекта HttpContext в консольном приложении.

Я пишу библиотеку оболочки для log4net. Эта библиотека должна быть в состоянии захватить информацию контекста, такую как строка запроса, cookie, поля формы и т. Д. И т. Д.

Я вызываю этот класс-оболочку из консольного приложения, в отличие от класса TDD.

Есть ли способ заполнить объект HttpContext внутри консольного приложения следующим образом?

HttpContext c = new HttpContext(null);
c.Request.QueryString.Keys[1] = "city";
c.Request.QueryString[1] = "Los Angeles";
c.Request.QueryString.Keys[2] = "state";
c.Request.QueryString[2] = "CA";

А потом восстановить это следующим образом?

Console.WriteLine(context.Request.QueryString.Keys[1]);

Я получаю следующее исключение при попытке использовать приведенный выше код.

Property or indexer 'System.Collections.Specialized.NameObjectCollectionBase.KeysCollection.this[int]' cannot be assigned to -- it is read only 
  • с какой стати вы зависите от httpcontext в консольном приложении? что вы пытаетесь достичь здесь?

    от AndreasKnudsen
  • Adreas, только что отредактировал мой вопрос, чтобы решить вашу проблему.

    от dotnet-practitioner
  • 1

    Вы можете прочитать здесь об использовании Moq, чтобы подделать его:

    http://o2platform.wordpress.com/2011/04/05/mocking-httpcontext-httprequest-and-httpresponse-for-unittests-using-moq/

  • 1

    Нелегко можно издеваться над HttpContext. Вы могли бы использовать

    Typemock Изолятор настроить контекст, но это не бесплатно. Другим (лучшим) подходом было бы абстрагирование HttpContext и реализация вашего консольного (тестового?) Клиента против ложной реализации абстракции.