Criação de rotas personalizadas (C#)

pela Microsoft

Saiba como adicionar rotas personalizadas a um aplicativo MVC ASP.NET. Neste tutorial, você aprenderá a modificar a tabela de rotas padrão no arquivo Global.asax.

Neste tutorial, você aprenderá a adicionar uma rota personalizada a um aplicativo MVC ASP.NET. Você aprenderá a modificar a tabela de rotas padrão no arquivo Global.asax com uma rota personalizada.

Para muitos aplicativos MVC ASP.NET simples, a tabela de rotas padrão funcionará muito bem. No entanto, você pode descobrir que tem necessidades de roteamento especializadas. Nesse caso, você pode criar uma rota personalizada.

Imagine, por exemplo, que você está criando um aplicativo de blog. Talvez você queira lidar com solicitações de entrada semelhantes a esta:

/Archive/12-25-2009

Quando um usuário insere essa solicitação, você deseja retornar a entrada de blog que corresponde à data 25/12/2009. Para lidar com esse tipo de solicitação, você precisa criar uma rota personalizada.

O arquivo Global.asax na Listagem 1 contém uma nova rota personalizada, chamada Blog, que manipula solicitações semelhantes a /Archive/entry date.

Listagem 1 – Global.asax (com rota personalizada)

using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                "Blog",                                           // Route name
                "Archive/{entryDate}",                            // URL with parameters
                new { controller = "Archive", action = "Entry" }  // Parameter defaults
            );
            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }
        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

A ordem das rotas que você adiciona à tabela de rotas é importante. Nossa nova rota de Blog personalizada é adicionada antes da rota Padrão existente. Se você inverteu o pedido, a rota Padrão sempre será chamada em vez da rota personalizada.

A rota personalizada do Blog corresponde a qualquer solicitação que comece com /Archive/. Portanto, ele corresponde a todas as seguintes URLs:

  • /Archive/12-25-2009

  • /Archive/10-6-2004

  • /Archive/apple

A rota personalizada mapeia a solicitação de entrada para um controlador chamado Archive e invoca a ação Entry(). Quando o método Entry() é chamado, a data de entrada é passada como um parâmetro chamado entryDate.

Você pode usar a rota personalizada blog com o controlador na Listagem 2.

Listagem 2 – ArchiveController.cs

using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
    public class ArchiveController : Controller
    {
        public string Entry(DateTime entryDate)
        {
            return "You requested the entry from " + entryDate.ToString();
        }
    }
}

Observe que o método Entry() na Listagem 2 aceita um parâmetro do tipo DateTime. A estrutura do MVC é inteligente o suficiente para converter a data de entrada da URL em um valor DateTime automaticamente. Se o parâmetro de data de entrada da URL não puder ser convertido em datetime, um erro será gerado (consulte Figura 1).

Figura 1 – Erro ao converter o parâmetro

A caixa de diálogo Novo Projeto

Figura 01: erro ao converter o parâmetro (Clique para exibir a imagem em tamanho real)

Resumo

O objetivo deste tutorial era demonstrar como você pode criar uma rota personalizada. Você aprendeu a adicionar uma rota personalizada à tabela de rotas no arquivo Global.asax que representa entradas de blog. Discutimos como mapear solicitações de entradas de blog para um controlador chamado ArchiveController e uma ação do controlador chamada Entry().