我需要为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()?谁知道该怎么办?