37 lines
1.8 KiB
C#
Raw Normal View History

namespace System.Web.Mvc {
using System.Collections.Specialized;
internal class UrlRewriterHelper {
private const string _urlWasRewrittenServerVar = "IIS_WasUrlRewritten";
private const string _urlRewriterEnabledServerVar = "IIS_UrlRewriteModule";
private object _lockObject = new object();
private bool _urlRewriterIsTurnedOnValue;
private bool _urlRewriterIsTurnedOnCalculated = false;
private static bool WasThisRequestRewritten(HttpContextBase httpContext) {
NameValueCollection serverVars = httpContext.Request.ServerVariables;
bool requestWasRewritten = (serverVars != null && serverVars[_urlWasRewrittenServerVar] != null);
return requestWasRewritten;
}
private bool IsUrlRewriterTurnedOn(HttpContextBase httpContext) {
// Need to do double-check locking because a single instance of this class is shared in the entire app domain (see PathHelpers)
if (!_urlRewriterIsTurnedOnCalculated) {
lock (_lockObject) {
if (!_urlRewriterIsTurnedOnCalculated) {
NameValueCollection serverVars = httpContext.Request.ServerVariables;
bool urlRewriterIsEnabled = (serverVars != null && serverVars[_urlRewriterEnabledServerVar] != null);
_urlRewriterIsTurnedOnValue = urlRewriterIsEnabled;
_urlRewriterIsTurnedOnCalculated = true;
}
}
}
return _urlRewriterIsTurnedOnValue;
}
public virtual bool WasRequestRewritten(HttpContextBase httpContext) {
return IsUrlRewriterTurnedOn(httpContext) && WasThisRequestRewritten(httpContext);
}
}
}