我想知道是否有确定ASP应用程序是否在本地运行的推荐方法。目前,我使用Request对象并在服务器变量上对localhost或127.0.0.1进行字符串搜索,但这有一些限制。最大的问题是Request对象在我需要时并不总是可用。
Answers:
bool isLocal = HttpContext.Current.Request.IsLocal;
这对我来说与Application_Start一起工作
if (!HostingEnvironment.IsDevelopmentEnvironment)
{
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
}
要了解有关如何设置IsDevelopmentEnvironment的更多信息,请查看以下线程。
在ASP.NET中,由什么决定HostingEnvironment.IsDevelopmentEnvironment的值?
在MVC视图/ ASP页/类后面的代码中:
bool isLocal = HttpContext.Current.Request.IsLocal;
在MVC控制器中:
bool isLocal = Request.IsLocal;
Request.IsLocal与检查127.0.0.1或:: 1相同。看到这篇文章:http : //forums.asp.net/p/1065813/4081335.aspx。
IsLocal
也指的是从SAME机器访问IIS站点时。当从本地计算机进来时,默认情况下,这样做还会显示YSOD详细错误消息。
如果HttpContext.Current不为null,请使用
HttpContext.Current.Request.IsLocal
否则,例如在App_Start或HttpContext.Current可用之前,您可以测试
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
或PC上的专用磁盘。
另一种方法是使用生产中设置的常量编译变量,例如,如果使用Azure和visualstudio.com,则使用它们。
它很脏,但是可以用。
请求不是在ASP.NET环境中总是可用的吗?
服务器开始处理页面后,便会初始化HttpContext及其属性Request / Response。因此,您可以在页面生命周期中的任何位置执行c#代码,您应该能够检查请求url。
Application_Start
,在没有HTTPContext的情况下执行。
Application_Start
可能总是在后台运行。同样,该问题与页面请求无关。
回应@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".