diff options
Diffstat (limited to 'src/System.Web.Mvc/RedirectResult.cs')
-rw-r--r-- | src/System.Web.Mvc/RedirectResult.cs | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/System.Web.Mvc/RedirectResult.cs b/src/System.Web.Mvc/RedirectResult.cs new file mode 100644 index 00000000..0dfad042 --- /dev/null +++ b/src/System.Web.Mvc/RedirectResult.cs @@ -0,0 +1,56 @@ +using System.Diagnostics.CodeAnalysis; +using System.Web.Mvc.Properties; + +namespace System.Web.Mvc +{ + // represents a result that performs a redirection given some URI + public class RedirectResult : ActionResult + { + [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", MessageId = "0#", Justification = "Response.Redirect() takes its URI as a string parameter.")] + public RedirectResult(string url) + : this(url, permanent: false) + { + } + + [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", MessageId = "0#", Justification = "Response.Redirect() takes its URI as a string parameter.")] + public RedirectResult(string url, bool permanent) + { + if (String.IsNullOrEmpty(url)) + { + throw new ArgumentException(MvcResources.Common_NullOrEmpty, "url"); + } + + Permanent = permanent; + Url = url; + } + + public bool Permanent { get; private set; } + + [SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "Response.Redirect() takes its URI as a string parameter.")] + public string Url { get; private set; } + + public override void ExecuteResult(ControllerContext context) + { + if (context == null) + { + throw new ArgumentNullException("context"); + } + if (context.IsChildAction) + { + throw new InvalidOperationException(MvcResources.RedirectAction_CannotRedirectInChildAction); + } + + string destinationUrl = UrlHelper.GenerateContentUrl(Url, context.HttpContext); + context.Controller.TempData.Keep(); + + if (Permanent) + { + context.HttpContext.Response.RedirectPermanent(destinationUrl, endResponse: false); + } + else + { + context.HttpContext.Response.Redirect(destinationUrl, endResponse: false); + } + } + } +} |