public void ShouldSetCustomHeaders()
    {
      RequestManager manager = new RequestManager();
      Request request = new Request { Path = "TestPage.aspx", QueryString = "header=MyCustomHeader", Headers = { { "MyCustomHeader", "custom-header-value" } } };

      Response response = manager.ExecuteRequest(request);

      Assert.Equal("custom-header-value", response.Content);
    }
    public void ShouldCallInitializationHandlerBeforeAndAfterRequest()
    {
      RequestManager manager = new RequestManager();
      Request request = new Request { Path = "TestPage.aspx", InitializationHandlers = { new InitializationHandler(typeof(SampleRequestInitializationHandler), new object[] { "parameter" }) } };

      Response response = manager.ExecuteRequest(request);

      Assert.Equal("parameter", response.Content);
    }
    public void ShouldRequestPage()
    {
      RequestManager manager = new RequestManager();
      Request request = new Request { Path = "TestPage.aspx" };

      Response response = manager.ExecuteRequest(request);

      Assert.Equal(200, response.StatusCode);
      Assert.Equal("Test page", response.Content);
    }
    /// <summary>
    /// Initializes a new instance of the <see cref="RequestInitializationContext"/> class.
    /// </summary>
    /// <param name="request">The request.</param>
    /// <param name="response">The response.</param>
    public RequestInitializationContext(Request request, Response response)
    {
      if (request == null)
      {
        throw new ArgumentNullException("request");
      }

      if (response == null)
      {
        throw new ArgumentNullException("response");
      }

      this.request = request;
      this.response = response;
    }
    /// <summary>
    /// Executes the request.
    /// </summary>
    /// <param name="request">The request.</param>
    /// <returns>The <see cref="Response"/>.</returns>
    public Response ExecuteRequest(Request request)
    {
      if (request == null)
      {
        throw new ArgumentNullException("request");
      }

      if (!HostingEnvironment.IsHosted)
      {
        throw new InvalidOperationException("Cannot execute request in environment which is not hosted.");
      }
      
      HttpWorkerRequest workerRequest = this.GetWorkerRequest(request);
      this.ExecuteWorkerRequest(workerRequest);
      return this.GetResponse(workerRequest);
    }
 /// <summary>
 /// Gets the worker request.
 /// </summary>
 /// <param name="request">The request.</param>
 /// <returns> The <see cref="HttpWorkerRequest"/>.</returns>
 protected virtual HttpWorkerRequest GetWorkerRequest(Request request)
 {
   return new WorkerRequest(this.InitializationManager, new RequestInitializationContext(request, new Response()), TextWriter.Null);
 }