我想知道是否有推荐的方法来确定 asp 应用程序是否在本地运行。目前,我使用 Request 对象并在服务器变量上对 localhost 或 127.0.0.1 进行字符串搜索,但这有几个限制。最大的问题是 Request 对象在我需要时并不总是可用的。
8 回答
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 不为空,请使用
HttpContext.Current.Request.IsLocal
否则,例如在 App_Start 或 HttpContext.Current 可用之前,您可以测试
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
或 PC 上的专用磁盘。
另一种方法是在生产环境中使用常量编译变量集,例如来自 Azure 和 visualstudio.com(如果您使用它们)。
它很脏,但它有效。
请求在 ASP.NET 环境中并不总是可用?
一旦服务器开始处理页面,HttpContext 及其属性 Request/Response 就会被初始化。因此,您可以在页面生命周期中的任何地方执行 c# 代码,您应该能够检查请求 url。