I'm having difficulty using a constraint on a custom route. The following is my class RouteConfig.cs
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 }
);
}
}
and the following is my Controller 'Produto'
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");
}
}
I want to restrict the user to enter a different one number digit, however when I put the constraint [constraints: new {id = @"\d+"}]
my URL ends up taking the 'Default' route, why does this happen?
(I'm new to MVC, I do not understand much about routes).
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)