asp.net MVC是否有应用程序variables?

我正忙于将Web应用程序转换为MVC,并将一些信息保存到跨多个租户/帐户使用的应用程序variables,以使事情变得更有效率。

我意识到MVC的重点是尽可能保持无状态,Sesion State在MVC中存在和存在显然是有意义的,但是我们不想仅仅将Application转换为Sessionvariables,因为我们宁愿有一些更全局和更安全的东西。 MVC应用程序是否具有应用程序variables? 我看过一些使用caching的例子吗? 这是现在的标准,这与应用程序/会话状态相比有多强大/安全?

  • ASP.Net MVC如何将数据从视图传递到控制器
  • 如何调用另一个控制器操作从Mvc中的控制器
  • ASP.NET MVC:如何将视图模型转换为Json对象
  • 如何在ASP.NET MVC 3razorViewStart文件中指定不同的布局?
  • ASP.NET MVC与Spring MVC
  • 什么是您的下一个ASP.NET项目的select:Web窗体或MVC?
  • 如何在MVC 5项目中从bootswatch或wrapbootstrap实现主题?
  • NHibernate,Entity Framework,活动logging或linq2sql
  • 6 Solutions collect form web for “asp.net MVC是否有应用程序variables?”

    是的,您可以从.NET MVC访问应用程序variables。 就是这样:

    System.Web.HttpContext.Current.Application.Lock(); System.Web.HttpContext.Current.Application["Name"] = "Value"; System.Web.HttpContext.Current.Application.UnLock(); 

    会话状态或Cache是​​更好的select。 他们在MVC中是可以嘲笑的,并且被devise成存储会话和应用程序范围的数据。

    静态类似乎是一个stream行的select。 但是,静态类会在您的types之间创build依赖关系,并使版本控制/testing更难。 在一个旨在分解这些types的依赖的框架中使用它也是一个奇怪的模式。 例如,标准的ASP.NET框架充斥着静态和密封types。 这些都被可模仿的实例取代。

    “安全”在这方面有点不清楚。 “安全”究竟是什么意思?

    我实现了像下面这样的全局状态variables的扩展。 我把网站标题,服务端点,授权angular色

     public static class ApplicationStateExtension { public static T GetSetApplicationState<T>(this HttpApplicationState appState, string objectName, object objectValue = null, int syncCheckMinutes = 0) { T retVal = default(T); appState.Lock(); if (appState[objectName + "LastSync"] == null || DateTime.Now.Subtract(((DateTime)appState[objectName + "LastSync"])).TotalMinutes >= syncCheckMinutes) { appState[objectName + "LastSync"] = DateTime.Now; if (objectValue != null) appState[objectName] = objectValue; } if (appState[objectName] != null) retVal = (T)appState[objectName]; appState.UnLock(); return retVal; } public static object GetSetApplicationState(this HttpApplicationState appState, string objectName, object objectValue = null, int syncCheckMinutes = 0) { object retVal = null; appState.Lock(); if (appState[objectName + "LastSync"] == null || DateTime.Now.Subtract(((DateTime)appState[objectName + "LastSync"])).TotalMinutes >= syncCheckMinutes) { appState[objectName + "LastSync"] = DateTime.Now; if (objectValue != null) appState[objectName] = objectValue; } if (appState[objectName] != null) retVal = appState[objectName]; appState.UnLock(); return retVal; } public static void SetApplicationState(this HttpApplicationState appState, string objectName, object objectValue, int syncCheckMinutes = 0) { appState.Lock(); if (appState[objectName + "LastSync"] == null || DateTime.Now.Subtract(((DateTime)appState[objectName + "LastSync"])).TotalMinutes >= syncCheckMinutes) { appState[objectName + "LastSync"] = DateTime.Now; appState[objectName] = objectValue; } appState.UnLock(); } public static object GetApplicationState(this HttpApplicationState appState, string objectName) { object retVal = null; appState.Lock(); if (appState[objectName] != null) retVal = appState[objectName]; appState.UnLock(); return retVal; } public static T GetApplicationState<T>(this HttpApplicationState appState, string objectName) { T retVal = default(T); appState.Lock(); if (appState[objectName] != null) retVal = (T)appState[objectName]; appState.UnLock(); return retVal; } } 

    所以我可以从Global.asax.cs中设置它们

     Application.SetApplicationState("UISiteTitle",paramHelper.GetUIConfigXML<XMLParams.UISiteOptions>("UISiteOptions") .SiteOptionCollection.Where(v => v.name.Equals("title", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault().value);); 

    要么

     var uiPermissions = Application.GetSetApplicationState<XMLParams.UIPermissions>("UIPermissions", paramHelper.GetUIConfigXML<XMLParams.UIPermissions>("UIPermissions"), 30); 

    做一个静态类?

    他们有应用程序variables吗? 是的,MVC是一个框架,位于正常的asp.net框架之上。

    然而,我会创build一个静态类,使用caching存储作为后盾。

    您可以像这样在Application_Start声明应用程序variables:

     protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RouteConfig.RegisterRoutes(RouteTable.Routes); var e = "Hello"; Application["value"] = e; } 

    要在控制器上访问,请写:

     string appVar = HttpContext.Application["value"] as string;