How do I get the host domain name in ASP .NET without using HttpContext.Current.Request?

I’ve got an ASP .Net application running on IIS7. I’m using the current url that the site is running under to set some static properties on a class in my application. To do this, I’m getting the domain name using this (insde the class’s static constructor):

var host = HttpContext.Current.Request.Url.Host;

And it works fine on my dev machine (windows XP / Cassini). However, when I deploy to IIS7, I get an exception: “Request is not available in this context”.

I’m guessing this is because I’m using this code in the static constructor of an object, which is getting executed in IIS before any requests come in; and Cassini doesn’t trigger the static constructor until a request happens. Now, I didn’t originally like the idea of pulling the domain name from the Request for this very reason, but it was the only place I found it =)

So, does anyone know of another place that I can get the host domain name? I’m assuming that ASP .Net has got to be aware of it at some level independent of HttpRequests, I just don’t know how to access it.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

The reason that the domain is in the request is…that’s what’s being asked for. For example these are a few stackexchange sites from http://www.stackexchangesites.com/:

If you ping them, you’ll see they all point to the same IP/Web Server and be served by the same app (or multiple apps in this case, but the example holds if it was one big one)…but the application doesn’t know which one until a host header comes in with the request asking the server for that site. Each request may be to a different domain…so the application doesn’t know it.

If however it doesn’t change, you could store it as an appSetting in the web.config.

Method 2

Use global.asax or write a HttpModule and subscribe to start request events. You will have the request passed into your event handler.

Method 3

Use this instead:

HttpRuntime.AppDomainAppVirtualPath

Or if you want the physical path:

HttpRuntime.AppDomainAppPath

For further reading:

http://weblogs.asp.net/reganschroder/archive/2008/07/25/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-application-start.aspx


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x