Application_BeginRequest()中的ASP.NET MVC注册包,这可能吗?

时间:2016-10-27 07:33:48

标签: c# asp.net asp.net-mvc bundle global-asax

我需要为ASP.NET MVC应用程序的BundleConfig添加一点复杂性。事实是,我的应用程序具有国际化功能,并且每个视图页面都需要加载遵循约定controllername_actionname.js的特定javascript文件。

为了达到这样的目的,我需要将一个cookie“lang”和请求控制器/动作名称传递给Bundle Config,并为不同的控制器动作/视图注册不同的bundle。我需要修改BundleConfig.RegisterBundles以接受另外两个语言和网址信息参数。

但问题是,默认情况下,Bundles在方法Application_Start()中注册。我无法从Application_Start()获取有关语言设置cookie和请求URL的信息,因为它们不存在,我只能在方法Application_BeginRequest()中获取此数据。所以我想知道,是否可以将Bundle注册代码从Application_Start()移动到Application_BeginRequest()。

而不是:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        UnityConfig.RegisterComponents();
    }
}

我将改为使用以下代码:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        UnityConfig.RegisterComponents();
    }

    protected void Application_BeginRequest()
    {
        var lang = (Request.Cookies["lang"] == null) ? "en" : Request.Cookies["lang"].Value;
        var url = Request.Url;
        BundleConfig.RegisterBundles(BundleTable.Bundles, lang, url);        
    }
}

这可能吗?如果没有,我可以通过什么方式将其他特定于服务器的参数传递给Bundle.RegisterBundles()?谁知道该怎么办?

0 个答案:

没有答案