Как создать новый HttpContext?
public void getContent() {
string VirtualPath = "~/Content.aspx";
var page = BuildManager.CreateInstanceFromVirtualPath( VirtualPath, typeof( Page ) ) as IHttpHandler;
page.ProcessRequest( HttpContext.Current );
}
Я использую эту функцию для загрузки содержимого из разных файлов, но " страница.ProcessRequest (HttpContext.Current ) " вставляет содержимое в текущий контекст, и мне нужна функция для возврата содержимого указанного файла.
интересно, есть ли рабочий способ создать новый HttpContext, так что " страница.ProcessRequest " не вставляйте ничего в текущий ответ.
4 ответов
Oded верен, насколько я знаю. Вы не можете легко создать свой собственный экземпляр HttpContext. Однако вы все еще можете достичь своих целей другими средствами.
использовать сервер.Выполнять. http://msdn.microsoft.com/en-us/library/ms150027.aspx.
вы можете указать HttpHandler для выполнения вместе с TextWriter для сброса содержимого.
вы не можете создать новую HttpContext
, не без много работы многоборье.
Это один из недостатков ASP.NET и BCL-делает веб-приложения непроверяемыми (или, по крайней мере, очень трудными для тестирования без HttpContext
.
Я не совсем понимаю ваше требование
проверить Pex / Moles its включает издевательскую структуру, которая может издеваться почти над любым типом или членом, даже если она запечатана или статична. (он делает это с помощью пользовательского тестового хоста)
public class HttpContextManager
{
private static HttpContextBase _context;
public static HttpContextBase Current
{
get
{
if (_context != null)
return _context;
if (HttpContext.Current == null)
throw new InvalidOperationException("HttpContext not available");
return new HttpContextWrapper(HttpContext.Current);
}
}
public static void SetCurrentContext(HttpContextBase context)
{
_context = context;
}
}