Routing to the controller with the required, non-empty Guid parameter

I would like to map http: // localhost / Guid-goes-here to the ResellerController and start the Index action of this controller only when Guid-goes-here not a null pointer.

My routing table looks like this:

 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Reseller", "{id}", new { controller = "Reseller", action = "Index", id = Guid.Empty } // We can mark parameters as UrlParameter.Optional, but how to make it required? ); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); } 

The action on the ResellerController as follows:

 public ActionResult Index(Guid id) { // do some stuff with non-empty guid here } 

Once the application has started, going to http: // localhost directs me to the ResellerController with an empty Guid as an argument for the Index action id .

+8
asp.net-mvc asp.net-mvc-routing
source share
2 answers
 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Reseller", "{id}", new { controller = "Reseller", action = "Index", id = UrlParameter.Optional }, new { id = @"^(\{{0,1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{0,1})$" } ); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); } 

or if you want a more robust constraint than any critical regular expression:

 public class GuidConstraint : IRouteConstraint { public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { var value = values[parameterName] as string; Guid guid; if (!string.IsNullOrEmpty(value) && Guid.TryParse(value, out guid)) { return true; } return false; } } 

and then:

 routes.MapRoute( "Reseller", "{id}", new { controller = "Reseller", action = "Index", id = UrlParameter.Optional }, new { id = new GuidConstraint() } ); 
+15
source share

You need to include a restriction in your routing definition. Take a look at this post: http://blogs.microsoft.co.il/blogs/bursteg/archive/2009/01/11/asp-net-mvc-route-constraints.aspx

+1
source share

All Articles