Настройка тела запроса HttpRequest для HttpContext.Current - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь выполнить модульный тест HttpContext в моем тестовом классе следующим образом, но не смог найти способ установить тело запроса для этого объекта.

Есть ли способ сделать это? Итак HttpContext.Current.Request.GetBufferedInputStream(); вернет байты строки тела, которую я установил.

   [TestMethod()]
    public void GetRequestStringTest2()
    {
        string filename = "";
        string url = "http://www.localhost.com";
        string queryString = "";
        HttpRequest request = new HttpRequest(filename, url, queryString);
        // TODO: set request body here
        // string requestBody = "request-test-123";
        StringBuilder sb = new StringBuilder("response-test-123");
        StringWriter writer = new StringWriter(sb);
        HttpResponse response = new HttpResponse(writer);
        HttpContext.Current = new HttpContext(request, response);
        string requestString = HttpUtilities.GetRequestString();
        Assert.IsNotNull(requestString);
        Assert.AreEqual("request-test-123", requestString);
    }

 public static string GetRequestString()
        {
            if (HttpContext.Current != null)
            {
                Stream stream = HttpContext.Current.Request.GetBufferedInputStream();
                new StreamReader(stream).ReadToEnd();
                StreamReader bodyStream = new StreamReader(HttpContext.Current.Request.InputStream);
                bodyStream.BaseStream.Seek(0, SeekOrigin.Begin);
                string requestString = bodyStream.ReadToEnd();
                return requestString;
            }

            throw new InvalidOperationException("HttpContext.Current is not available.");
        }

1 Ответ

0 голосов
/ 03 мая 2018

Да, но это будет нелегко.

Для этого вам нужно вызвать метод internal void SetRawContent(HttpRawUploadedContent rawContent) из HttpRequest.

Проблема в том, что вы не можете вызвать внутренний метод из внешней сборки, однако есть несколько способов обойти это: C # - Как получить доступ к внутреннему классу из внешней сборки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...