2011-01-09 83 views
0

我想创建网址与网页强类型对象的路由,但我不断收到第一行空的对象,所以它崩溃网址与强类型对象路由

//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

哪个对象为空?显示或requestContext?如果它是显示的,当你调试的时候,构建管理器返回一个对象,但它不是IProfileHandler类型的? – Vadim 2011-01-09 16:55:12

+0

display is null,当我投射到iprofilehandler时它返回null,当我投射到ihttphandler时它返回指定的对象 – user510336 2011-01-09 17:16:59

回答

1

对于那些谁路过这里一个web.config入口,这里是我做什么,我增加一些属性到我的网页类和我铸造那个班,这似乎是个好主意。

0

CreateInstanceFromVirtualPath没有返回一个对象,实施IProfileHandler

编辑:

你试图返回的对象强制转换为IProfileHandler。这意味着你说“Ok编译器,我知道这个方法返回一个object,但我保证它已经是一个实现IProfileHandler的实例。”由于CreateInstanceFromVirtualPath方法是在不知道自定义类的情况下创建的,因此无法返回保证遵循由您的自定义界面设置的合约(具有属性int MemberId)的对象。由于对象不能正确铸造,并且您正在使用运算符,所以您将得到空值。如果你做了一个正常的演员,一个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 
    } 
} 

<configuration> 
    <system.web> 
     <httpHandlers> 
     <add verb="*" path="*.yourIntendedExtension" type="FQN, Assembly" /> 
     </httpHandlers> 
    </system.web> 
</configuration>