Skip to content

Commit 43241a3

Browse files
[MVC] RedirectHandler follows HTTP status code 303 See other (#33246)
Missing HTTP status code from the 3xx class was added.
1 parent 5ccc740 commit 43241a3

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

src/Mvc/Mvc.Testing/src/Handlers/RedirectHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ private static bool ShouldKeepVerb(HttpResponseMessage response) =>
173173
private bool IsRedirect(HttpResponseMessage response) =>
174174
response.StatusCode == HttpStatusCode.MovedPermanently ||
175175
response.StatusCode == HttpStatusCode.Redirect ||
176+
response.StatusCode == HttpStatusCode.RedirectMethod ||
176177
response.StatusCode == HttpStatusCode.RedirectKeepVerb ||
177178
(int)response.StatusCode == 308;
178179
}

src/Mvc/test/Mvc.FunctionalTests/TestingInfrastructureTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,20 @@ public async Task TestingInfrastructure_RedirectHandlerUsesOriginalRequestHeader
114114
Assert.Equal("false", modifiedHeaderWasSent);
115115
}
116116

117+
[Fact]
118+
public async Task TestingInfrastructure_RedirectHandlerFollowsStatusCode303()
119+
{
120+
// Act
121+
var request = new HttpRequestMessage(HttpMethod.Get, "Testing/RedirectHandler/Redirect303");
122+
var client = Factory.CreateDefaultClient(
123+
new RedirectHandler());
124+
var response = await client.SendAsync(request);
125+
126+
// Assert
127+
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
128+
Assert.Equal("Test", await response.Content.ReadAsStringAsync());
129+
}
130+
117131
[Fact]
118132
public async Task TestingInfrastructure_PostRedirectGetWorksWithCookies()
119133
{

src/Mvc/test/WebSites/BasicWebSite/Controllers/TestingController.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Linq;
55
using System.Threading.Tasks;
66
using Microsoft.AspNetCore.Mvc;
7+
using System.Net;
78

89
namespace BasicWebSite.Controllers
910
{
@@ -63,6 +64,30 @@ public IActionResult RedirectHandlerHeadersRedirect()
6364
}
6465
}
6566

67+
[HttpGet("Testing/RedirectHandler/Redirect303")]
68+
public IActionResult RedirectHandlerStatusCode303()
69+
{
70+
return new RedirectUsingStatusCode("Testing/Builder", HttpStatusCode.SeeOther);
71+
}
72+
73+
public class RedirectUsingStatusCode : ActionResult
74+
{
75+
private string _url;
76+
private HttpStatusCode _statusCode;
77+
78+
public RedirectUsingStatusCode(string url, HttpStatusCode statusCode)
79+
{
80+
_url = url;
81+
_statusCode = statusCode;
82+
}
83+
84+
public override void ExecuteResult(ActionContext context)
85+
{
86+
context.HttpContext.Response.Redirect(_url);
87+
context.HttpContext.Response.StatusCode = (int)_statusCode;
88+
}
89+
}
90+
6691
[HttpGet("Testing/AntiforgerySimulator/{value}")]
6792
public IActionResult AntiforgerySimulator([FromRoute]int value)
6893
{

src/Mvc/test/WebSites/GenericHostWebSite/Controllers/TestingController.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Linq;
55
using System.Threading.Tasks;
66
using Microsoft.AspNetCore.Mvc;
7+
using System.Net;
78

89
namespace GenericHostWebSite.Controllers
910
{
@@ -63,6 +64,30 @@ public IActionResult RedirectHandlerHeadersRedirect()
6364
}
6465
}
6566

67+
[HttpGet("Testing/RedirectHandler/Redirect303")]
68+
public IActionResult RedirectHandlerStatusCode303()
69+
{
70+
return new RedirectUsingStatusCode("Testing/Builder", HttpStatusCode.SeeOther);
71+
}
72+
73+
public class RedirectUsingStatusCode : ActionResult
74+
{
75+
private string _url;
76+
private HttpStatusCode _statusCode;
77+
78+
public RedirectUsingStatusCode(string url, HttpStatusCode statusCode)
79+
{
80+
_url = url;
81+
_statusCode = statusCode;
82+
}
83+
84+
public override void ExecuteResult(ActionContext context)
85+
{
86+
context.HttpContext.Response.Redirect(_url);
87+
context.HttpContext.Response.StatusCode = (int)_statusCode;
88+
}
89+
}
90+
6691
[HttpGet("Testing/AntiforgerySimulator/{value}")]
6792
public IActionResult AntiforgerySimulator([FromRoute]int value)
6893
{

0 commit comments

Comments
 (0)