From 222addf2644047db93b38ce1d744617bdaf88a1b Mon Sep 17 00:00:00 2001 From: Mikael Mengistu Date: Thu, 3 Nov 2016 13:22:10 -0700 Subject: [PATCH] Added a default status code for redirects in mod_rewrite --- .../Internal/ApacheModRewrite/RuleBuilder.cs | 14 ++++++++++---- .../ApacheModRewrite/RuleBuilderTest.cs | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/RuleBuilder.cs b/src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/RuleBuilder.cs index 7bb0d1cd3f..638192b602 100644 --- a/src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/RuleBuilder.cs +++ b/src/Microsoft.AspNetCore.Rewrite/Internal/ApacheModRewrite/RuleBuilder.cs @@ -3,7 +3,9 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Text.RegularExpressions; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Rewrite.Internal.UrlActions; using Microsoft.AspNetCore.Rewrite.Internal.UrlMatches; @@ -12,7 +14,7 @@ namespace Microsoft.AspNetCore.Rewrite.Internal.ApacheModRewrite public class RuleBuilder { private IList _conditions; - private IList _actions = new List(); + internal IList _actions = new List(); private UrlMatch _match; private CookieActionFactory _cookieActionFactory = new CookieActionFactory(); @@ -200,12 +202,16 @@ namespace Microsoft.AspNetCore.Rewrite.Internal.ApacheModRewrite string statusCode; if (flags.GetValue(FlagType.Redirect, out statusCode)) { - int res; - if (!int.TryParse(statusCode, out res)) + int responseStatusCode; + if (string.IsNullOrEmpty(statusCode)) + { + responseStatusCode = StatusCodes.Status302Found; + } + else if (!int.TryParse(statusCode, NumberStyles.None, CultureInfo.InvariantCulture, out responseStatusCode)) { throw new FormatException(Resources.FormatError_InputParserInvalidInteger(statusCode, -1)); } - _actions.Add(new RedirectAction(res, pattern, queryStringAppend, queryStringDelete, escapeBackReference)); + _actions.Add(new RedirectAction(responseStatusCode, pattern, queryStringAppend, queryStringDelete, escapeBackReference)); } else { diff --git a/test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/RuleBuilderTest.cs b/test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/RuleBuilderTest.cs index df1a16adf1..ec0b46803f 100644 --- a/test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/RuleBuilderTest.cs +++ b/test/Microsoft.AspNetCore.Rewrite.Tests/ApacheModRewrite/RuleBuilderTest.cs @@ -2,7 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.Collections.Generic; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Rewrite.Internal; using Microsoft.AspNetCore.Rewrite.Internal.ApacheModRewrite; +using Microsoft.AspNetCore.Rewrite.Internal.UrlActions; using Xunit; namespace Microsoft.AspNetCore.Rewrite.Tests @@ -20,5 +24,19 @@ namespace Microsoft.AspNetCore.Rewrite.Tests var ex = Assert.Throws(() => builder.AddAction(null, flags)); Assert.Equal(Resources.Error_ChangeEnvironmentNotSupported, ex.Message); } + + [Fact] + public void AddAction_DefaultRedirectStatusCode() + { + var builder = new RuleBuilder(); + var flags = new Flags(); + var pattern = new Pattern(new List()); + flags.SetFlag(FlagType.Redirect, string.Empty); + + builder.AddAction(pattern, flags); + var redirectAction = (RedirectAction)builder._actions[0]; + + Assert.Equal(StatusCodes.Status302Found, redirectAction.StatusCode); + } } } \ No newline at end of file