url使用强类型对象进行路由

时间:2011-01-09 16:43:21

标签: c# asp.net url routing

我正在尝试使用强类型对象为页面创建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;
    }
}

2 个答案:

答案 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>