我们公司希望将我们的Web应用程序的预编译版本提供给第三方,以便他们可以添加自己的页面和模块。 为了实现这一目标,我到目前为止做了以下事情:
然后我将以下静态方法添加到我们的主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()
的{{1}}方法中调用此方法。这段代码确实成功地实例化了正确类的页面并开始处理请求。
问题:
我的HttpHandler
处理程序中的代码会引发异常,因为Page_PreLoad
null 。我还发现Page.Form
集合为空。
我做错了什么?我应该走另一条路来实现这个目标吗?