Как создать новый 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;
            }

        }