我想知道是否有推荐的方法来确定asp应用程序是否在本地运行。目前我使用Request对象并在服务器变量上执行localhost或127.0.0.1的字符串搜索,但这有一些限制。最大的问题是Request对象在我需要时并不总是可用。
答案 0 :(得分:143)
bool isLocal = HttpContext.Current.Request.IsLocal;
答案 1 :(得分:12)
您可以查看Request.IsLocal属性
答案 2 :(得分:5)
这适用于我的Application_Start
if (!HostingEnvironment.IsDevelopmentEnvironment)
{
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
}
要了解有关如何设置IsDevelopmentEnvironment的更多信息,请查看以下主题。
In ASP.NET, what determines the value of HostingEnvironment.IsDevelopmentEnvironment?
答案 3 :(得分:1)
Request.IsLocal与检查127.0.0.1或:: 1相同。看这篇文章:http://forums.asp.net/p/1065813/4081335.aspx。
答案 4 :(得分:1)
如果HttpContext.Current不为null,请使用
HttpContext.Current.Request.IsLocal
否则,例如在App_Start中或在HttpContext.Current可用之前,您可以测试
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
或PC上的专用磁盘。
另一种方法是使用生产中的常量编译变量集,例如Azure和visualstudio.com(如果您使用它们)。
很脏,但是有效。
答案 5 :(得分:1)
在类后面的MVC视图/ ASP页面/代码中:
bool isLocal = HttpContext.Current.Request.IsLocal;
在MVC控制器中:
bool isLocal = Request.IsLocal;
答案 6 :(得分:0)
ASP.NET环境中并不总是提供请求?
HttpContext及其属性一旦服务器开始处理页面,就会初始化Request / Response。因此,您可以在页面生命周期中的任何地方执行c#代码,以便检查请求网址。
答案 7 :(得分:0)
响应@Meh Men在此主题中对其他答案的评论,他问:
在哪里请求为空呢?即:Application_start?
如果您确定网站的生产和测试版本或“同志”版本将全部与网站的发行版一起部署,而本地环境将以“调试”模式构建和开发,则可以使用使用#if DEBUG
的sintax来编写仅应在本地运行的代码,而在此块之外,甚至在匹配的#else
块内,您可以编写一些其他代码,这些代码只在不本地(例如:远程)。
这是我如何在一个目前正在从事的特定项目中解决此问题的方式的小样本:
#if DEBUG
// Code here will only be run locally.
#else
// Code here will only be run "remotely".