Determine if ASP.NET application is running locally
.Netasp.netLocalhost.Net Problem Overview
I want to know if there is a recommended way of determining if an asp application is running locally. At the moment I use the Request object and do a string search for localhost or 127.0.0.1 on the server variable but this has several limitations. The biggest one being that the Request object is not always available when I need it.
.Net Solutions
Solution 1 - .Net
bool isLocal = HttpContext.Current.Request.IsLocal;
Solution 2 - .Net
You can check the Request.IsLocal property
Solution 3 - .Net
This worked for me with Application_Start
if (!HostingEnvironment.IsDevelopmentEnvironment)
{
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
}
To know more about how IsDevelopmentEnvironment is set, please look at the following thread.
Solution 4 - .Net
In a MVC view / ASP page / code behind class:
bool isLocal = HttpContext.Current.Request.IsLocal;
In an MVC controller :
bool isLocal = Request.IsLocal;
Solution 5 - .Net
In response to @Meh Men's comment for other answer in this thread, who asked:
> What about where Request is null. i.e: Application_start?
If you are sure your production and test or "homolog" versions of your website will all be deployed with a release version of your website, while your local environment will be built and developed in "debug" mode, you can make use of #if DEBUG
sintax to write code which only should be run locally, while outside of this block, or even inside a matching #else
block, you may write some other code which you want to be run only when not locally (e.g: remotely).
Here is a small sample of how I've solved this problem in a particular project I'm curreltly working on:
#if DEBUG
// Code here will only be run locally.
#else
// Code here will only be run "remotely".
Solution 6 - .Net
Request.IsLocal is the same as checking for 127.0.0.1 or ::1. See this post: http://forums.asp.net/p/1065813/4081335.aspx.
Solution 7 - .Net
If HttpContext.Current is not null use
HttpContext.Current.Request.IsLocal
Otherwise, for example in the App_Start or before HttpContext.Current is available, you can test
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
or a dedicated disk on your PC.
Another way can be use a constant compilation variable set in production, for example from Azure and visualstudio.com if you use them.
It is dirty, but it works.
Solution 8 - .Net
Request is not always available in ASP.NET environment?
HttpContext and its properties Request/Response are initialized as soon as the server starts processing the page. So at any place you can execute c# code in your page life cycle you should be able to check the request url.