blob: 5a08542b743a542e15227cb6195cc212372d45ee (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
using System.Collections.Specialized;
namespace System.Web.Mvc
{
internal class UrlRewriterHelper
{
private const string UrlWasRewrittenServerVar = "IIS_WasUrlRewritten";
private const string UrlRewriterEnabledServerVar = "IIS_UrlRewriteModule";
private object _lockObject = new object();
private bool _urlRewriterIsTurnedOnValue;
private volatile 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);
}
}
}
|