1

当我发布我的网站debug="false"模式和BundleTable.EnableOptimizations = true 服务器返回以下异常的捆绑脚本和样式,而请求仅用于非授权请求!但是,如果我运行的应用程序与debug="true"或在用户登录(通过窗体身份验证在释放模式)的异常不会发生,每变薄工作得很好。捆绑和发布模式问题

我觉得应该有捆绑和认证之间的关系!如例外所示。

有什么不对?

我的捆扎的代码:

public static void RegisterBundles(BundleCollection bundles) 
    { 
     StyleBundle bundleStyles = new StyleBundle("~/bundles/styles/"); 
     bundleStyles.Include(
      "~" + Paths.Scripts.AdminSkin.css.reset_css, 
      "~" + Paths.Scripts.AdminSkin.css.common_css, 
      "~" + Paths.Scripts.AdminSkin.css.form_css, 

      //do not move this line to blow 
      "~" + Paths.Scripts.site.css.standard_css, 

      "~" + Paths.Scripts.AdminSkin.css.standard_css, 
      "~" + Paths.Scripts.AdminSkin.css.special_pages_css, 

      //"~" + Paths.Scripts.AdminSkin.css.simple_lists_css, 
      //"~" + Paths.Scripts.AdminSkin.css.block_lists_css, 
      //"~" + Paths.Scripts.AdminSkin.css.planning_css, 
      //"~" + Paths.Scripts.AdminSkin.css.table_css, 
      //"~" + Paths.Scripts.AdminSkin.css.calendars_css, 
      //"~" + Paths.Scripts.AdminSkin.css.wizard_css, 
      //"~" + Paths.Scripts.AdminSkin.css.gallery_css, 

      "~" + Paths.Scripts.site.css.login_css, 
      "~" + Paths.Scripts.site.css.site_css, 
      "~" + Paths.Scripts.site.css.tables_css, 
      "~" + Paths.Scripts.site.css.standard_fa_css, 


      "~" + Paths.Scripts.site.css.theme_selector_css, 
      "~" + Paths.Scripts.jquery_ui_1_9_2.css.redmond.jquery_ui_1_9_2_custom_css, 
      "~" + Paths.Scripts.ImageGallery.wt_rotator_css, 
      "~" + Paths.Scripts.ImageGallery.default_css, 
      "~" + Paths.Scripts.calendar.aqua.theme_css 
      ); 

     ScriptBundle bundleScripts = new ScriptBundle("~/bundles/scripts/"); 
     bundleScripts.Include(
      //Admin Skin Scripts 
      "~" + Paths.Scripts.AdminSkin.js.old_browsers_js, 
      "~" + Paths.Scripts.AdminSkin.js.libs.jquery_hashchange_js, 
      "~" + Paths.Scripts.AdminSkin.js.jquery_accessibleList_js, 
      "~" + Paths.Scripts.AdminSkin.js.searchField_js, 
      "~" + Paths.Scripts.AdminSkin.js.common_js, 
      "~" + Paths.Scripts.AdminSkin.js.standard_js, 
      "~" + Paths.Scripts.AdminSkin.js.jquery_tip_js, 
      "~" + Paths.Scripts.AdminSkin.js.jquery_contextMenu_js, 
      "~" + Paths.Scripts.AdminSkin.js.jquery_modal_js, 
      "~" + Paths.Scripts.AdminSkin.js.list_js, 
      //"~" + Paths.Scripts.AdminSkin.js.libs.jquery_dataTables_min_js, 

      //jquery plug ins 
      "~" + Paths.Scripts.jquery_ui_1_9_2.js.jquery_ui_1_9_2_custom_js, 
      "~" + Paths.Scripts.jquery_cookie.jquery_cookie_js, 


      "~" + Paths.Scripts.site.js.site_js, 
      "~" + Paths.Scripts.site.js.clock_js, 
      "~" + Paths.Scripts.site.js.size_js, 
      "~" + Paths.Scripts.site.js.cookie_manager_js, 


      //devexpress related 
      "~" + Paths.Scripts.site.js.devexpress_theme_js, 
      "~" + Paths.Scripts.site.js.devexpress_controls_js, 

      //chart scripts 
      "~" + Paths.Scripts.Highstock_1_2_5.highstock_src_modified_js, 
      "~" + Paths.Scripts.Highstock_1_2_5.exporting_js, 
      "~" + Paths.Scripts.Highstock_1_2_5.highcharts_more_js, 
      "~" + Paths.Scripts.site.js.chart_fa_js, 

      //calendar scripts 
      "~" + Paths.Scripts.calendar.jalali_js, 
      "~" + Paths.Scripts.calendar.calendar_js, 
      "~" + Paths.Scripts.calendar.calendar_setup_js, 
      "~" + Paths.Scripts.calendar.calendar_fa_js, 
      "~" + Paths.Scripts.calendar.calendar_en_js, 

      //image gallery scripts 
      "~" + Paths.Scripts.ImageGallery.js.jquery_wt_rotator_min_js, 
      "~" + Paths.Scripts.ImageGallery.js.jquery_easing_1_3_min_js, 
      "~" + Paths.Scripts.ImageGallery.js.preview_js 
      ); 


     if (RequestCachedItems.Setting.UseGoogleMap) 
     { 

     } 
     else 
     { 
      //leaflet map script 
      bundleScripts.Include("~" + Paths.Scripts.leaflet_0_7.leaflet_src_js); 
      //leaflet map style 
      bundleStyles.Include("~" + Paths.Scripts.leaflet_0_7.leaflet_css, new CssRewriteUrlTransform()); 
     } 

     ScriptBundle bundleLiveScripts = new ScriptBundle("~/bundles/livescripts/"); 
     bundleLiveScripts.Include(
      "~" + Paths.Scripts.signalr.jquery_signalR_2_0_0_min_js, 
      "~" + Paths.Scripts.signalr.hubs_js, 
      "~" + Paths.Scripts.liveControls.connectionManager_js, 
      "~" + Paths.Scripts.liveControls.liveControls_js, 
      "~" + Paths.Scripts.liveControls.liveTables_js 
      ); 

     bundles.Add(bundleStyles); 
     bundles.Add(bundleScripts); 
     bundles.Add(bundleLiveScripts); 

     BundleTable.EnableOptimizations = true; 

    } 

除外:

[NullReferenceException异常:对象引用不设置到 对象的实例] System.Web.HttpContext.RequestRequiresAuthorization() +18 System.Web.Caching.OutputCacheModule.OnLeave(Object source,EventArgs eventArgs)+9606196
System.Web.SyncEventExecutionStep.Sy stem.Web.HttpApplication.IExecutionStep.Execute() +136 System.Web.HttpApplication.ExecuteStep(IExecutionStep一步,布尔& completedSynchronously)+69

+0

这听起来像是和捆绑无关,但是当用户没有登录(资源为空)时,您有问题获取资源。 – MikeSmithDev

+0

@MikeSmithDev,为什么它是空?以及用户何时登录的原因? –

+0

这是你的代码的问题。我猜它会像'Paths.Scripts.AdminSkin'为空,如果用户没有登录和/或用户不是管理员。 – MikeSmithDev

回答

1

我在Global.ascx.cs 使用Application_PostAuthenticateRequest并取得HttpContext.Current.User空。我评论过这条线,问题解决了。

public class Global : HttpApplication 
{ 
    FormsAuthenticationTicket ticket; 
    ExtendedUser extendedUser; 

    protected void Application_PostAuthenticateRequest(Object sender, EventArgs e) 
    { 
     //cause of problem 
     //HttpContext.Current.User = null; 
     if (FormsAuthentication.CookiesSupported) 
     { 
      if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) 
      { 
       try 
       { 
        ticket = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value); 

        using (UnitOfWork unit = new UnitOfWork()) 
        { 
         if (ticket.Name == SecurityHelpers.SuperAdminUserName) 
         { 
          SecurityHelpers.GetSuperAdminUser(unit); 
         } 
         else 
         { 
          extendedUser = SecurityHelpers.GetUser(unit, ticket); 
         } 
        } 

        if (extendedUser != null) 
        { 
         string[] roles = extendedUser.Group.GroupRoles.Select(a => a.Role.RoleName).ToArray(); 
         HttpContext.Current.User = new GenericPrincipal(new MyFormsIdentity(extendedUser), roles); 
        } 
       } 
       catch (Exception) 
       { 
        // Decrypt method failed. 
       } 
      } 
     } 
     else 
     { 
      // throw new HttpException("Cookieless Forms Authentication is not " + 
      //       "supported for this application."); 
     } 
    } 
} 
+0

真棒!我花了整整一天的时间试图从某人的“定制授权”代码中排除这个问题......他们将用户设置为全空。删除了所有的代码,它工作得很好。注销时,捆绑装载完美,但无法查看锁定的页面。好一个!这是一个很难找到......最终梳理异常和MVC束使我这个+水烟! – ppumkin