title: ASP.NET MVC - About Constraints in Routes
body: <p>I'm having difficulty using a constraint on a custom route. 
  The following is my class RouteConfig.cs</p>
  
  <pre><code>public class RouteConfig
      {
          public static void RegisterRoutes(RouteCollection routes)
          {
              routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  
              routes.MapRoute(
                  name: "produtos",
                  url: "produtos/{action}/{id}",
                  defaults: new { controller = "Produto", action = "Listar", id = UrlParameter.Optional },
                  constraints: new { id = @"\d+" }
              );
  
              routes.MapRoute(
                  name: "Default",
                  url: "{action}/{controller}/{id}",
                  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
              );
          }
      }
  </code></pre>
  
  <p>and the following is my Controller 'Produto'</p>
  
  <pre><code>public class ProdutoController : Controller
      {
  
          MozitMVCContext _context = new MozitMVCContext();
  
          [HttpGet]
          public ActionResult Cadastrar()
          {
              return View();
          }
  
          [HttpPost]
          public ActionResult Cadastrar(Produto produto)
          {
              if (ModelState.IsValid)
              {
                  _context.Produtos.Add(produto);
                  _context.SaveChanges();
  
                  return RedirectToAction("Cadastrar");
              }
  
              return View(produto);
          }
  
          [HttpGet]
          public ActionResult Alterar(int id)
          {
              var produto = _context.Produtos.Find(id);
              return View(produto);
          }
  
          [HttpPost]
          public ActionResult Alterar(Produto produto)
          {
              if (ModelState.IsValid)
              {
                  _context.Produtos.Attach(produto);
                  _context.Entry(produto).State = EntityState.Modified;
                  _context.SaveChanges();
                  return RedirectToAction("Listar");
              }
  
              return View(produto);
          }
  
          public ActionResult Listar()
          {
              var produto = _context.Produtos.ToList();
  
              return View(produto);
          }
  
          public ActionResult Detalhes(int id)
          {
              var produto = _context.Produtos.Find(id);
              return View(produto);
          }
  
          public ActionResult Excluir(int id)
          {
              _context.Produtos.Remove(_context.Produtos.Find(id));
              _context.SaveChanges();
              return RedirectToAction("Listar");
          }
  
      }
  </code></pre>
  
  <p>I want to restrict the user to enter a different one number digit, however when I put the constraint <code>[constraints: new {id = @"\d+"}]</code> my URL ends up taking the 'Default' route, why does this happen? 
  (I'm new to MVC, I do not understand much about routes). </p>
  
  <p>I'm trying to follow a video course and make my code work, I include an Image: (sorry for quality of image, print of video)</p>
  
  <p><img src="https://i.stack.imgur.com/tGxlD.png" alt="Routes"></p>