diff --git a/src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ServerVariables.cs b/src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ServerVariables.cs
index eb3e73f8..2b44331a 100644
--- a/src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ServerVariables.cs
+++ b/src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/ServerVariables.cs
@@ -16,12 +16,12 @@ public static class ServerVariables
///
/// Translates mod_rewrite server variables strings to an enum of different server variables.
///
- /// The server variable string.
+ /// The server variable string.
/// The Parser context
/// The appropriate enum if the server variable exists, else ServerVariable.None
- public static PatternSegment FindServerVariable(string variable, ParserContext context)
+ public static PatternSegment FindServerVariable(string serverVariable, ParserContext context)
{
- switch (variable)
+ switch (serverVariable)
{
case "HTTP_ACCEPT":
return new HeaderSegment(HeaderNames.Accept);
@@ -84,23 +84,23 @@ public static PatternSegment FindServerVariable(string variable, ParserContext c
case "SERVER_SOFTWARE":
throw new NotSupportedException("Rules using the SERVER_SOFTWARE server variable are not supported");
case "TIME_YEAR":
- return new DateTimeSegment(variable);
+ return new DateTimeSegment(serverVariable);
case "TIME_MON":
- return new DateTimeSegment(variable);
+ return new DateTimeSegment(serverVariable);
case "TIME_DAY":
- return new DateTimeSegment(variable);
+ return new DateTimeSegment(serverVariable);
case "TIME_HOUR":
- return new DateTimeSegment(variable);
+ return new DateTimeSegment(serverVariable);
case "TIME_MIN":
- return new DateTimeSegment(variable);
+ return new DateTimeSegment(serverVariable);
case "TIME_SEC":
- return new DateTimeSegment(variable);
+ return new DateTimeSegment(serverVariable);
case "TIME_WDAY":
- return new DateTimeSegment(variable);
+ return new DateTimeSegment(serverVariable);
case "TIME":
- return new DateTimeSegment(variable);
+ return new DateTimeSegment(serverVariable);
case "API_VERSION":
- throw new NotSupportedException();
+ throw new NotSupportedException("Rules using the API_VERSION server variable are not supported");
case "HTTPS":
return new IsHttpsModSegment();
case "HTTP2":
@@ -116,7 +116,7 @@ public static PatternSegment FindServerVariable(string variable, ParserContext c
case "THE_REQUEST":
throw new NotSupportedException("Rules using the THE_REQUEST server variable are not supported");
default:
- throw new FormatException(Resources.FormatError_InputParserUnrecognizedParameter(variable, context.Index));
+ throw new FormatException(Resources.FormatError_InputParserUnrecognizedParameter(serverVariable, context.Index));
}
}
}
diff --git a/src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/InputParser.cs b/src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/InputParser.cs
index 39268037..8a944972 100644
--- a/src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/InputParser.cs
+++ b/src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/InputParser.cs
@@ -75,7 +75,7 @@ private static void ParseParameter(ParserContext context, IList
{
// This is just a server variable, so we do a lookup and verify the server variable exists.
parameter = context.Capture();
- results.Add(ServerVariables.FindServerVariable(parameter));
+ results.Add(ServerVariables.FindServerVariable(parameter, context));
return;
}
else if (context.Current == Colon)
diff --git a/src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ServerVariables.cs b/src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ServerVariables.cs
index 35112b78..a9c92a9a 100644
--- a/src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ServerVariables.cs
+++ b/src/Microsoft.AspNetCore.Rewrite/Internal/IISUrlRewrite/ServerVariables.cs
@@ -9,15 +9,15 @@ namespace Microsoft.AspNetCore.Rewrite.Internal.IISUrlRewrite
{
public static class ServerVariables
{
- public static PatternSegment FindServerVariable(string serverVariable)
+ public static PatternSegment FindServerVariable(string serverVariable, ParserContext context)
{
switch (serverVariable)
{
// TODO Add all server variables here.
case "ALL_RAW":
- throw new NotSupportedException("Rules using the AUTH_TYPE server variable are not supported");
+ throw new NotSupportedException("Rules using the ALL_RAW server variable are not supported");
case "APP_POOL_ID":
- throw new NotSupportedException("Rules using the AUTH_TYPE server variable are not supported");
+ throw new NotSupportedException("Rules using the APP_POOL_ID server variable are not supported");
case "CONTENT_LENGTH":
return new HeaderSegment(HeaderNames.ContentLength);
case "CONTENT_TYPE":
@@ -41,7 +41,7 @@ public static PatternSegment FindServerVariable(string serverVariable)
case "LOCAL_ADDR":
return new LocalAddressSegment();
case "HTTP_PROXY_CONNECTION":
- throw new NotSupportedException("Rules using the AUTH_TYPE server variable are not supported");
+ throw new NotSupportedException("Rules using the HTTP_PROXY_CONNECTION server variable are not supported");
case "QUERY_STRING":
return new QueryStringSegment();
case "REMOTE_ADDR":
@@ -55,7 +55,7 @@ public static PatternSegment FindServerVariable(string serverVariable)
case "REQUEST_URI":
return new UrlSegment();
default:
- throw new FormatException("Unrecognized server variable");
+ throw new FormatException(Resources.FormatError_InputParserUnrecognizedParameter(serverVariable, context.Index));
}
}
}
diff --git a/test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/ServerVariableTests.cs b/test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/ServerVariableTests.cs
index 3235ab7d..dd35c76c 100644
--- a/test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/ServerVariableTests.cs
+++ b/test/Microsoft.AspNetCore.Rewrite.Tests/IISUrlRewrite/ServerVariableTests.cs
@@ -27,7 +27,8 @@ public class ServerVariableTests
public void CheckServerVariableParsingAndApplication(string variable, string expected)
{
// Arrange and Act
- var serverVar = ServerVariables.FindServerVariable(variable);
+ var testParserContext = new ParserContext("test");
+ var serverVar = ServerVariables.FindServerVariable(variable, testParserContext);
var lookup = serverVar.Evaluate(CreateTestHttpContext(), CreateTestRuleMatch(), CreateTestCondMatch());
// Assert
Assert.Equal(expected, lookup);