Настраиваемая маршрутизация на основе обратных вызовов ASP.NET; создание и рендеринг динамических ASPX-страниц - PullRequest
0 голосов
/ 15 февраля 2012

Я работаю над небольшим школьным проектом, веб-сайтом ASP.NET C #; мы работаем с веб-приложением, используя файл Global.asax для централизации логики запросов.

В любом случае, мой коллега и я несем ответственность за кодирование в нашей группе, и мы оба являемся опытными PHP-разработчиками. Нам обоим очень нравится работать с архитектурным стилем, используемым средой PHP Laravel , используя маршруты ( обратные вызовы, связанные с ) в качестве «контроллеров», и (, несмотря на то, что это квадратный колышек, проблема круглого отверстия ) пытаются воспроизвести эту функциональность для этого проекта.

Это нелегкая задача; Я реализовал интерфейс IRouteHandler как CallbackRouteHandler, пытаясь начать реплицировать эту функциональность:

public class CallbackRouteHandler : IRouteHandler
{
    public Func<RequestContext, IHttpHandler> Callback { get; protected set; }

    public CallbackRouteHandler(Func<RequestContext, IHttpHandler> callback)
    {
        this.Callback = callback;
    }

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return this.Callback(requestContext);
    }
}

К сожалению, это примерно столько, сколько я получил. Я читаю обзор жизненного цикла страницы ASP.NET , пытаясь лучше понять весь процесс.

То, что мы застряли на , это программная загрузка файлов ASPX (точнее, , создание экземпляров в виде Page объектов ) в рамках заданного обратного вызова маршрута. Мы надеялись, что в рамках обратного вызова будет достаточно простой способ выполнить что-то вроде:

// instantiate the target ASPX page object
OurSite.SomeNamespace.SomePage page = new OurSite.SomeNamespace.SomePage();

// manipulate the page object, setting public properties, etc.
page.SomeControl.Text = "Foobar!";

// eventually "render" the file to somehow; at this point, the
// page and it's associated code-behind events take control
page.Render();

У меня проблемы с пониманием обоих: 1) Как это сделать? 2) Когда ( относительно вышеупомянутого жизненного цикла страницы ) сделать это.

Как (, если вообще ) можно реализовать такую ​​функциональность? Я вижу, что этот процесс, скрытый от ASP.NET, кажется очень сложным, но наверняка другие уже шли по этому пути раньше.

1 Ответ

0 голосов
/ 31 декабря 2012

Я работал с MVC для этого проекта, однако с тех пор у меня появилась возможность немного проанализировать конвейер запросов ASP.NET, и я реализовал собственные решения для маршрутизации в соответствии с требованиями.

...