Я планирую создать собственный маршрут с использованием веб-страниц ASP.NET путем динамического создания экземпляров WebPage
следующим образом:
IHttpHandler handler = System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath("~/Default.cshtml");
Как я могу предоставить объект базовому WebPage
объекту, чтобы он мог стать "моделью" веб-страниц? Другими словами, я хочу иметь возможность записать @Model.Firstname
в файл Default.cshtml
.
Любая помощь будет принята с благодарностью.
UPDATE
Изменив ответ @Pranav, я смог получить базовый WebPage
объект, используя отражение:
public void ProcessRequest(HttpContext context)
{
//var page = (WebPage) System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath(this.virtualPath);
var handler = System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath(this.virtualPath);
var field = handler.GetType().GetField("_webPage", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
var page = field.GetValue(handler) as System.Web.WebPages.WebPage;
var contextWrapper = new HttpContextWrapper(context);
var pageContext = new WebPageContext(contextWrapper, page, context.Items[CURRENT_NODE]);
page.ExecutePageHierarchy(pageContext, contextWrapper.Response.Output);
}
К сожалению, это ненадежно, так как не работает в Medium Trust (BindingFlags.NonPublic игнорируется, если приложение не работает с полным доверием). Поэтому, хотя мы добились значительного прогресса, решение еще не завершено.
Любые предложения будут с благодарностью.