繁体   English   中英

确定 ASP.NET 应用程序是否在本地运行

[英]Determine if ASP.NET application is running locally

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

参见HttpRequest.IsLocal

bool isLocal = HttpContext.Current.Request.IsLocal;

您可以检查 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;

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

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

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

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

#if DEBUG
    // Code here will only be run locally.
#else
    // Code here will only be run "remotely".

Request.IsLocal 与检查 127.0.0.1 或 ::1 相同。 请参阅此帖子: http : //forums.asp.net/p/1065813/4081335.aspx

如果 HttpContext.Current 不是 null 使用

HttpContext.Current.Request.IsLocal

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

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

或 PC 上的专用磁盘。

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

它很脏,但它有效。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM