1
namespace System
.Web
.Mvc
{
3 using System
.Web
.Mvc
.Resources
;
4 using System
.Web
.Routing
;
6 // represents a result that performs a redirection given some values dictionary
7 public class RedirectToRouteResult
: ActionResult
{
9 private RouteCollection _routes
;
11 public RedirectToRouteResult(RouteValueDictionary routeValues
) :
12 this(null, routeValues
) {
15 public RedirectToRouteResult(string routeName
, RouteValueDictionary routeValues
)
16 : this(routeName
, routeValues
, permanent
: false) {
19 public RedirectToRouteResult(string routeName
, RouteValueDictionary routeValues
, bool permanent
) {
20 Permanent
= permanent
;
21 RouteName
= routeName
?? String
.Empty
;
22 RouteValues
= routeValues
?? new RouteValueDictionary();
25 public bool Permanent
{
30 public string RouteName
{
35 public RouteValueDictionary RouteValues
{
40 internal RouteCollection Routes
{
42 if (_routes
== null) {
43 _routes
= RouteTable
.Routes
;
52 public override void ExecuteResult(ControllerContext context
) {
53 if (context
== null) {
54 throw new ArgumentNullException("context");
56 if (context
.IsChildAction
) {
57 throw new InvalidOperationException(MvcResources
.RedirectAction_CannotRedirectInChildAction
);
60 string destinationUrl
= UrlHelper
.GenerateUrl(RouteName
, null /* actionName */, null /* controllerName */, RouteValues
, Routes
, context
.RequestContext
, false /* includeImplicitMvcValues */);
61 if (String
.IsNullOrEmpty(destinationUrl
)) {
62 throw new InvalidOperationException(MvcResources
.Common_NoRouteMatched
);
65 context
.Controller
.TempData
.Keep();
68 context
.HttpContext
.Response
.RedirectPermanent(destinationUrl
, endResponse
: false);
71 context
.HttpContext
.Response
.Redirect(destinationUrl
, endResponse
: false);