1 namespace System.Web.Mvc {
2 using System.Collections.Specialized;
4 internal class UrlRewriterHelper {
5 private const string _urlWasRewrittenServerVar = "IIS_WasUrlRewritten";
6 private const string _urlRewriterEnabledServerVar = "IIS_UrlRewriteModule";
8 private object _lockObject = new object();
9 private bool _urlRewriterIsTurnedOnValue;
10 private bool _urlRewriterIsTurnedOnCalculated = false;
12 private static bool WasThisRequestRewritten(HttpContextBase httpContext) {
13 NameValueCollection serverVars = httpContext.Request.ServerVariables;
14 bool requestWasRewritten = (serverVars != null && serverVars[_urlWasRewrittenServerVar] != null);
15 return requestWasRewritten;
18 private bool IsUrlRewriterTurnedOn(HttpContextBase httpContext) {
19 // Need to do double-check locking because a single instance of this class is shared in the entire app domain (see PathHelpers)
20 if (!_urlRewriterIsTurnedOnCalculated) {
22 if (!_urlRewriterIsTurnedOnCalculated) {
23 NameValueCollection serverVars = httpContext.Request.ServerVariables;
24 bool urlRewriterIsEnabled = (serverVars != null && serverVars[_urlRewriterEnabledServerVar] != null);
25 _urlRewriterIsTurnedOnValue = urlRewriterIsEnabled;
26 _urlRewriterIsTurnedOnCalculated = true;
30 return _urlRewriterIsTurnedOnValue;
33 public virtual bool WasRequestRewritten(HttpContextBase httpContext) {
34 return IsUrlRewriterTurnedOn(httpContext) && WasThisRequestRewritten(httpContext);