Ответ 1
Благодаря комментарий в Галварде У меня была подсказка, чтобы найти ответ:
Параметры конструктора HttpRequest отключены между ними.
Параметр url используется для создания HttpRequest.Url
, а свойство queryString используется для свойства HttpRequest.QueryString
: они отсоединены
Чтобы иметь согласованное HttpRequest с URL-адресом с querystring, вы должны:
var httpRequest = new HttpRequest
("", "http://www.google.com/?name=gdfgd", "name=gdfgd");
В противном случае вы неправильно загрузите свойство Url или QueryString.
Есть мой обновленный метод Mock Helpers:
public static HttpContext FakeHttpContext(string url)
{
var uri = new Uri(url);
var httpRequest = new HttpRequest(string.Empty, uri.ToString(), uri.Query.TrimStart('?'));
var stringWriter = new StringWriter();
var httpResponse = new HttpResponse(stringWriter);
var httpContext = new HttpContext(httpRequest, httpResponse);
var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollection(),
new HttpStaticObjectsCollection(), 10, true,
HttpCookieMode.AutoDetect,
SessionStateMode.InProc, false);
SessionStateUtility.AddHttpSessionStateToContext(httpContext, sessionContainer);
return httpContext;
}