2

我们公司希望将我们的 Web 应用程序的预编译版本提供给第三方,以便他们可以向其中添加自己的页面和模块。为了实现这一目标,到目前为止,我已经完成了以下工作:

  1. 将我们的主要 Web 应用程序编译为 Web 部署项目
  2. 创建了一个 POC Web 应用程序,该应用程序引用了上述第 1 步产生的 DLL。

然后,我将以下静态方法添加到我们的主 Web 应用程序中,它有望处理对其预编译的 aspx 页面的请求:

public static bool TryProcessRequest(HttpContext context)
{
    string rawUrl = context.Request.RawUrl;
    int aspxIdx = rawUrl.IndexOf(".aspx");
    if (aspxIdx > 0)
    {
        string aspxPagePath = rawUrl.Substring(0, aspxIdx + 5);

        string aspxPageClassName = aspxPagePath.Substring(1).Replace('/','_').Replace(".aspx","");
        Assembly website = Assembly.GetAssembly(typeof(MCLLogin));
        Type pageClass = website.GetType(aspxPageClassName);
        ConstructorInfo ctor = pageClass.GetConstructor(new Type[] { });
        IHttpHandler pageObj = (IHttpHandler)ctor.Invoke(new object[] { });

        context.Server.Execute(pageObj, context.Response.Output, false);

        //alternative: invoking the page's ProcessRequest method - same results
        //System.Reflection.MethodInfo method = pageClass.GetMethod("ProcessRequest");
        //method.Invoke(pageObj, new object[] { context });

        return true;
    }
    return false; //not handled
}

然后,每当我希望我们的主 Web 应用程序处理请求时,我都会在 POC Web 应用程序的ProcessRequest()方法中调用此方法。HttpHandler该代码确实成功地实例化了正确类的页面并开始处理请求。

问题: 我的Page_PreLoad处理程序中的代码抛出异常,因为Page.Formnull。我还发现Page.Controls集合是的。

我究竟做错了什么?我应该走一条不同的道路来实现这一目标吗?

4

0 回答 0