我正在尝试使用强类型对象为页面创建url路由,但是我在第一行继续获取null对象,因此它崩溃了
//Getting the suitable executing Page
var display = BuildManager.CreateInstanceFromVirtualPath(_virtualPath,typeof(Page)) as IProfileHandler;
//Setting Page Parameters
display.MemberId = Convert.ToInt32(requestContext.RouteData.Values["ID"]);
//Return Page
return display;
public interface IProfileHandler : IHttpHandler
{
int MemberId
{
get;
set;
}
}
答案 0 :(得分:1)
对于那些经过这里的人来说,这就是我所做的,我在我的页面类中添加了一些属性,并且我正在向该类进行投射,这看起来很好而且很好。
答案 1 :(得分:0)
CreateInstanceFromVirtualPath
未返回实现IProfileHandler
的对象。
编辑:
您正在尝试将返回对象强制转换为IProfileHandler
。这意味着你说“Ok Compiler,我知道这个方法返回object
,但我保证它已经是一个实现IProfileHandler
的实例。”由于CreateInstanceFromVirtualPath
方法是在不了解自定义类的情况下创建的,因此无法返回保证遵循自定义接口设置的合同的对象(具有属性int MemberId
)。由于无法正确地投放对象并且您正在使用as
运算符,因此您将获得null。如果你做了正常演员,那么InvalidCastException
就会被抛出。
我不确定我是否适合回答你是如何实现它的,因为我从来没有对HttpHandlers做过任何工作,但根据this documentation看起来你创建了一个实现IHttpHandler的类,修改web.config以使用新的处理程序,然后将其强制转换为新类。也许像是
public class ProfileHttpHandler: IHttpHandler
{
public int MemberId { get; set; }
public bool IsReusable
{
get
{
// return value here
}
}
public void ProcessRequest(HttpContext context)
{
// custom request processing here
}
}
使用
的web.config条目<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="*.yourIntendedExtension" type="FQN, Assembly" />
</httpHandlers>
</system.web>
</configuration>