80

我想知道是否有推荐的方法来确定 asp 应用程序是否在本地运行。目前,我使用 Request 对象并在服务器变量上对 localhost 或 127.0.0.1 进行字符串搜索,但这有几个限制。最大的问题是 Request 对象在我需要时并不总是可用的。

4

8 回答 8

149

请参阅HttpRequest.IsLocal

bool isLocal = HttpContext.Current.Request.IsLocal;
于 2009-03-28T00:20:20.347 回答
13

您可以检查 Request.IsLocal 属性

于 2009-03-28T00:19:47.150 回答
7

这对我有用 Application_Start

if (!HostingEnvironment.IsDevelopmentEnvironment)
{
      GlobalFilters.Filters.Add(new RequireHttpsAttribute());
}

要了解更多关于 IsDevelopmentEnvironment 是如何设置的,请查看以下线程。

在 ASP.NET 中,什么决定了 HostingEnvironment.IsDevelopmentEnvironment 的值?

于 2017-06-19T15:34:53.183 回答
4

在 MVC 视图/ASP 页面/类后面的代码中:

bool isLocal = HttpContext.Current.Request.IsLocal;

在 MVC 控制器中:

bool isLocal = Request.IsLocal;
于 2018-01-25T17:49:58.217 回答
3

回应@Meh Men 对该线程中其他答案的评论,他问:

Request 为空的地方呢?即:Application_start?

如果您确定您的网站的生产和测试或“同源”版本都将与您的网站的发布版本一起部署,而您的本地环境将以“调试”模式构建和开发,您可以使用#if DEBUGsintax编写只应在本地运行的代码,而在此块之外,甚至在匹配的#else块内,您可能会编写一些您希望仅在非本地运行的其他代码(例如:远程)。

这是我在当前正在处理的特定项目中如何解决此问题的一个小示例:

#if DEBUG
    // Code here will only be run locally.
#else
    // Code here will only be run "remotely".
于 2020-04-16T17:46:42.863 回答
1

Request.IsLocal 与检查 127.0.0.1 或 ::1 相同。见这篇文章:http ://forums.asp.net/p/1065813/4081335.aspx 。

于 2010-09-16T15:31:07.813 回答
1

如果 HttpContext.Current 不为空,请使用

HttpContext.Current.Request.IsLocal

否则,例如在 App_Start 或 HttpContext.Current 可用之前,您可以测试

HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")

或 PC 上的专用磁盘。

另一种方法是在生产环境中使用常量编译变量集,例如来自 Azure 和 visualstudio.com(如果您使用它们)。

它很脏,但它有效。

于 2017-04-25T20:35:47.253 回答
0

请求在 ASP.NET 环境中并不总是可用?

一旦服务器开始处理页面,HttpContext 及其属性 Request/Response 就会被初始化。因此,您可以在页面生命周期中的任何地方执行 c# 代码,您应该能够检查请求 url。

于 2009-03-28T01:08:59.840 回答