无法将空对象转换为在 ProcessRequest 方法中引发的值类型异常

本文关键字:异常 类型 方法 ProcessRequest 对象 转换 | 更新日期: 2024-11-07 01:38:43

我能够获得CurrentSideId,我可以通过应用程序说出任何地方。我有一个名为MainClass的课程。它具有静态CurrentSideId属性。 MainClass.CurrentSiteId返回请求的SiteId

public class MainClass{
   public static int CurrentSiteId
   {
      get { return HttpContext.Current.Request.RequestContext.RouteData.Values["CurrentSiteId"].To<int>(); }
      set {..}
   }
}

但是,当涉及到HttpHandler ProcessRequest方法时,CurrentSiteId抛出了一个类型System.InvalidCastException的异常Null object cannot be converted to a value type.

public class MyRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new MyHttpHandler();
    }
}
public class MyHttpHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var siteId = MainClass.CurrentSiteId;
    }
}

决议是什么?

无法将空对象转换为在 ProcessRequest 方法中引发的值类型异常

您应该能够通过context访问它,前提是传入路由值:

Convert.ToInt16(context.Request.RequestContext.RouteData.Values["CurrentSiteId"]);

更新

请尝试以下操作:

public class MyHttpHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var siteId = Convert.ToInt16(context.Request.RequestContext.RouteData.Values["CurrentSiteId"]);
    }
}

您应该在强制转换之前检查该值是否不为 null可以在这里找到一个很好的例子:在 MVC3 中,如何获取当前操作名称?(将操作替换为要调用的方法)