【问题标题】:Custom ASP.NET callback-based routing; dynamic ASPX page instantiation and rendering自定义 ASP.NET 基于回调的路由;动态 ASPX 页面实例化和渲染
【发布时间】:2012-03-06 11:55:37
【问题描述】:

我正在做一个小型学校项目,一个 ASP.NET C# 网站;我们正在使用一个 Web 应用程序,使用 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 Page Life Cycle Overview,试图更好地理解整个过程。

我们遇到的问题是在给定路由回调的范围内以编程方式加载 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 隐藏起来的过程看似非常复杂,但肯定其他人之前已经踏上了这条道路。

【问题讨论】:

  • 切换到 MVC,这一切都变得无比简单。
  • 您是否研究过 ASP.NET MVC 的此功能或正在开发您项目的这一部分?
  • +1 @M.Babcock -- 当然,但这是我们暂时采取的路线(原谅我)。我正在研究 MVC,但无论如何理解请求过程肯定会对我有所帮助。
  • @JaredShaver 这不是必需的,不。但是,从学术的角度来看,我对此感到好奇。我熟悉其他平台中的 MVC 堆栈,所以我怀疑它会特别难以使用,但是我和我的队友都在 PHP 中使用 Laravel 框架进行了大量工作,并希望复制该功能,因为实践中的便利,以及 .NET 的学习体验。
  • MVC是开源的,你可以在这里查看:aspnet.codeplex.com/SourceControl/BrowseLatest 既然听起来你想重新实现它,你不妨看看实现的源代码。

标签: c# asp.net routes httphandler iroutehandler


【解决方案1】:

我为这个项目选择了 MVC,但后来我有机会稍微剖析 ASP.NET 请求管道,并根据需要实施了自定义路由解决方案。

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 2012-06-08
    • 2019-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2015-05-08
    相关资源
    最近更新 更多