Asp.net mvc 4 EPiServer 7.1 MVC 4引发NullReferenceException

Asp.net mvc 4 EPiServer 7.1 MVC 4引发NullReferenceException,asp.net-mvc-4,glimpse,episerver-7,Asp.net Mvc 4,Glimpse,Episerver 7,我有一个MVC4应用程序构建在EpiServer7.1之上。EPiServer使用StructureMap作为其IoC框架,这可能与我的问题有关。无论如何,这就是我所做的: 通过“管理Nuget软件包…”,在我的项目中添加了“一瞥Mvc4” 已验证web.config是否按预期更新 重新启动我的应用程序 添加预览后,所有请求都会失败,并出现NullReferenceException,例如: 我曾尝试通过在web.config的Spile部分的“logging level=“Trace”中添加

我有一个MVC4应用程序构建在EpiServer7.1之上。EPiServer使用StructureMap作为其IoC框架,这可能与我的问题有关。无论如何,这就是我所做的:

  • 通过“管理Nuget软件包…”,在我的项目中添加了“一瞥Mvc4”
  • 已验证web.config是否按预期更新
  • 重新启动我的应用程序
  • 添加预览后,所有请求都会失败,并出现NullReferenceException,例如:

    我曾尝试通过在web.config的Spile部分的“logging level=“Trace”中添加注释来启用Spile日志记录,但在Windows事件日志或log4net日志文件中都找不到任何日志记录


    关于如何进一步排除故障的想法,或解决方案的提示?

    +1此处也一样。到目前为止,我发现通过添加“一瞥”,它扩展了所有路由,并用自己的代理类代替,用于拦截对路由的调用。 epserver(特别是urlsolver)似乎不喜欢这种情况。此异常的根本原因是以下方法:

    UrlResolver.GetVirtualPath(ContentReference contentLink, string language, RouteValueDictionary routeValues, RequestContext requestContext)
    
    它不喜欢的是路由表中没有ContentRoute类型的路由:

    foreach (RouteBase base2 in from r in this._routes
    where (bool) (r is ContentRoute)
    select r)
    {
       ...
       if(...)
       {
           return virtualPath;
       }
    }
    
    return null;
    
    在将null返回给调用方nullreferenceexpception occours in之后:

    UrlExtensions.MapUrlFromRoute(RequestContext requestContext, RouteCollection routeCollection, string url)
    
    似乎应该等待来自EPiServer的补丁。

    一个解决方法(感谢@avanderhoorn!)是将此添加到web.config的“一瞥”部分:

    <glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
          <tabs>
            <ignoredTypes>
              <add type="Glimpse.AspNet.Tab.Routes, Glimpse.AspNet"/>
            </ignoredTypes>
          </tabs>
        <inspectors>
            <ignoredTypes>
                <add type="Glimpse.AspNet.Inspector.RoutesInspector, Glimpse.AspNet"/>
                <add type="Glimpse.Mvc.Inspector.ModelBinderInspector, Glimpse.Mvc4"/>
            </ignoredTypes>
        </inspectors>
    </glimpse>
    
    
    

    这将禁用与EPiServer断开的两个部分。据我所知,你仍然可以得到最有用的零件

    浏览日志应显示在站点根文件夹中的
    scape.log
    文件中。我还没有尝试使用EpiServer7.1,今天晚些时候我会尝试看一看。谢谢你的反馈。是的,我发现
    scape.log
    文件是新的,但它没有给出任何提示-只是正常的
    DEBUG
    INFO
    消息。嗨,Valdis!谢谢你的更新-我刚刚意识到完全一样,当我看到你的答复时,我正要更新我的问题。我想我们依赖于EPiServer来进行更改——最好是从侧面进行更改,因为这是开源的。但我怀疑是否有一个简单的方法来更新一瞥来处理这个问题。我刚刚意识到EpiServer CMS Find插件也不能正常工作。无法将类型为“Castle.Proxies.IViewProxy_1”的对象强制转换为类型为“System.Web.Mvc.WebFormView”。