Quiero saber si existe una forma recomendada de determinar si una aplicación asp se está ejecutando localmente. Por el momento, uso el objeto Request y hago una búsqueda de cadena para localhost o 127.0.0.1 en la variable del servidor, pero esto tiene varias limitaciones. El más importante es que el objeto Solicitud no siempre está disponible cuando lo necesito.
79
Puede comprobar la propiedad Request.IsLocal
fuente
Esto funcionó para mí con Application_Start
if (!HostingEnvironment.IsDevelopmentEnvironment) { GlobalFilters.Filters.Add(new RequireHttpsAttribute()); }
Para saber más sobre cómo se configura IsDevelopmentEnvironment, consulte el siguiente hilo.
En ASP.NET, ¿qué determina el valor de HostingEnvironment.IsDevelopmentEnvironment?
fuente
En una vista MVC / página ASP / código detrás de la clase:
bool isLocal = HttpContext.Current.Request.IsLocal;
En un controlador MVC:
bool isLocal = Request.IsLocal;
fuente
Request.IsLocal es lo mismo que verificar 127.0.0.1 o :: 1. Vea esta publicación: http://forums.asp.net/p/1065813/4081335.aspx .
fuente
IsLocal
también se refiere a cuando visita el sitio de IIS desde la MISMA máquina. Al hacerlo, también se muestran los mensajes de error detallados de YSOD de forma predeterminada, cuando se ingresa desde la máquina local.Si HttpContext.Current no es nulo, use
HttpContext.Current.Request.IsLocal
De lo contrario, por ejemplo, en App_Start o antes de que HttpContext.Current esté disponible, puede probar
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
o un disco dedicado en su PC.
Otra forma puede ser usar una variable de compilación constante establecida en producción, por ejemplo, de Azure y visualstudio.com si las usa.
Está sucio, pero funciona.
fuente
¿La solicitud no siempre está disponible en el entorno ASP.NET?
HttpContext y sus propiedades Request / Response se inicializan tan pronto como el servidor comienza a procesar la página. Entonces, en cualquier lugar donde pueda ejecutar el código c # en el ciclo de vida de su página, debería poder verificar la URL de solicitud.
fuente
Application_Start
se ejecuta sin HTTPContext.Application_Start
pueden estar siempre ejecutándose en segundo plano. Además, la pregunta no tiene nada que ver con las solicitudes de página.En respuesta al comentario de @Meh Men para otra respuesta en este hilo, quien preguntó:
Si está seguro de que sus versiones de producción y de prueba u "homologadas" de su sitio web se implementarán con una versión de lanzamiento de su sitio web, mientras que su entorno local se creará y desarrollará en modo "depuración", puede hacer uso de
#if DEBUG
sintax para escriba código que solo debe ejecutarse localmente, mientras que fuera de este bloque, o incluso dentro de un#else
bloque coincidente , puede escribir algún otro código que desee que se ejecute solo cuando no sea localmente (por ejemplo: de forma remota).Aquí hay una pequeña muestra de cómo resolví este problema en un proyecto en particular en el que estoy trabajando actualmente:
#if DEBUG // Code here will only be run locally. #else // Code here will only be run "remotely".
fuente