aspnetcore/test/WebSites/BasicWebSite/Controllers/TestingController.cs

138 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace BasicWebSite.Controllers
{
public class TestingController : Controller
{
public TestingController(TestService service)
{
Service = service;
}
public TestService Service { get; }
[HttpGet("Testing/Builder")]
public string Get() => Service.Message;
[HttpPost("Testing/RedirectHandler/{value}")]
public IActionResult RedirectHandler(
[FromRoute]int value,
[FromBody] Number number,
[FromHeader(Name = "X-Pass-Thru")] string passThruValue)
{
Response.Headers.Add("X-Pass-Thru", passThruValue);
if (value < number.Value)
{
return RedirectToActionPreserveMethod(
nameof(RedirectHandler),
"Testing",
new { value = value + 1 });
}
return Ok(new RedirectHandlerResponse { Url = value, Body = number.Value });
}
[HttpGet("Testing/RedirectHandler/Headers")]
public IActionResult RedirectHandlerHeaders()
{
if (!Request.Headers.TryGetValue("X-Added-Header", out var value))
{
return Content("No header present");
}
else
{
return RedirectToAction(nameof(RedirectHandlerHeadersRedirect));
}
}
[HttpGet("Testing/RedirectHandler/Headers/Redirect")]
public IActionResult RedirectHandlerHeadersRedirect()
{
if (Request.Headers.TryGetValue("X-Added-Header", out var value))
{
return Content("true");
}
else
{
return Content("false");
}
}
[HttpGet("Testing/AntiforgerySimulator/{value}")]
public IActionResult AntiforgerySimulator([FromRoute]int value)
{
Response.Cookies.Append(
"AntiforgerySimulator",
$"Cookie-{value.ToString(CultureInfo.InvariantCulture)}");
return Ok();
}
[HttpPost("Testing/PostRedirectGet/Post/{value}")]
public IActionResult PostRedirectGetPost([FromRoute]int value)
{
var compareValue = $"Cookie-{value.ToString(CultureInfo.InvariantCulture)}";
if (!Request.Cookies.ContainsKey("AntiforgerySimulator"))
{
return BadRequest("Missing AntiforgerySimulator cookie");
}
if (!string.Equals(compareValue, Request.Cookies["AntiforgerySimulator"]))
{
return BadRequest("Values don't match");
}
TempData["Value"] = value + 1;
Response.Cookies.Append("Message", $"Value-{(value + 1).ToString(CultureInfo.InvariantCulture)}");
return RedirectToAction(nameof(PostRedirectGetGet));
}
[HttpGet("Testing/PostRedirectGet/Get/{value}")]
public IActionResult PostRedirectGetGet([FromRoute]int value)
{
return Ok(new PostRedirectGetGetResponse
{
TempDataValue = (int)TempData["Value"],
CookieValue = Request.Cookies["Message"]
});
}
[HttpPut("Testing/Put/{value}")]
public IActionResult PutNoBody([FromRoute]int value)
{
if (value < 5)
{
return RedirectToActionPermanentPreserveMethod(nameof(PutNoBody), "Testing", new { value = value + 1 });
}
else
{
return Ok(value);
}
}
}
public class PostRedirectGetGetResponse
{
public int TempDataValue { get; set; }
public string CookieValue { get; set; }
}
public class RedirectHandlerResponse
{
public int Url { get; set; }
public int Body { get; set; }
}
public class Number
{
public int Value { get; set; }
}
}