ASP .NET MVC - Ciclo de vida da requisição


Ao programar usando ASP .NET MVC é importante conhecer qual o ciclo de vida de uma requisição ou request desde o seu inicio até o seu encerramento.

Neste artigo vou expor um resumo do ciclo de vida de uma requisição ASP .NET MVC.

Existem sete etapas principais que ocorrem quando você realiza uma requisição (request) em aplicações ASP .NET MVC conforme mostra a figura abaixo:

Vejamos a seguir cada uma das etapas envolvidas em um request.

1- Roteamento

O roteamento ASP .NET é o primeiro passo no ciclo de vida da requisição MVC.

O roteamento é um sistema de correspondência padrão que verifica a URL da requisição contra os padrões das URL registradas na tabela de rota ou Route Table.

Quando um padrão correspondente é encontrado na tabela de rotas, o motor de roteamento encaminha a requisição para o IRouteHandler correspondente para este pedido, que chama o MvcHandler. O motor de roteamento retorna um código de status HTTP 404 contra a requisição se o padrão não for encontrado na tabela de rotas.

Quando a aplicação é iniciada pela primeira vez, ela registra um ou mais padrões para a tabela de Rotas(Table Route) para dizer ao sistema de roteamento o que fazer com todos as requisições que correspondem a esses padrões. Um aplicativo tem apenas uma tabela de rotas e esta configuração esta localizada no arquivo Global.asax da aplicação.

Abaixo vemos um exemplo d rota padrão definida no Global.asax:

RegisterRoutes public static void (rotas RouteCollection)
{
     routes.IgnoreRoute (". {recurso} axd / {* pathInfo}");
     routes.MapRoute ("Default",             //nome da rota
         "{controller} / {action} / {id}",    //URL com os parâmetros
      new {controller = "Home", action = "Índice", id = UrlParameter.Optional} // Parâmetros padrão
     );
}

Assim, quando um usuário informa uma URL no navegador , a aplicação MVC usa as regras de roteamento que são definidas no arquivo Global.asax para realizar o parse da URL e determinar o caminho do controller que então determina o método Action apropriado para tratar a requisição.

Por padrão a URL de uma requisição é tratada como um subcaminho que inclui o nome do controller seguido pelo nome da Action(ação). Exemplo:

  1.  - Se um usuário informar a URL : http://macoratti.com/Vendas/Produtos/Categorias  o subcaminho é /Produtos/Categorias;
  2.  - As regras de roteamento tratam "Produtos" como o nome do controller e "Categorias" como o nome da Action;
  3.  - Desta forma a regra de roteamento invoca o método Categorias do controller Produtos a fim de processar a requisição;
  4.  - Se a URL terminar com /Produtos/Detalhes/5 o roteamento padrão trata "Detalhes" como sendo o nome da Action e o método Detalhes do controller Produtos será invocado para processar a requisição;
  5.   - O valor 5 na URL será passado para o método "Detalhes" como um parâmetro;
2- MVCHandler

O MvcHandler é responsável por iniciar o processamento real dentro da ASP.NET MVC. Ele implementa a interface IHttpHandler e ainda processa a requisição usando o método ProcessRequest como mostrado abaixo:

protected internal virtual void ProcessRequest(HttpContextBase httpContext)
{
   SecurityUtil.ProcessInApplicationTrust(delegate {
         IController controller;
         IControllerFactory factory;
         this.ProcessRequestInit(httpContext, out controller, out factory);
         try
         {
            controller.Execute(this.RequestContext);
         }
         finally
         {
           factory.ReleaseController(controller);
         }
    });
}

Assim o MvcHandler seleciona o controlador que manipulará uma solicitação HTTP.

3- Controller

Conforme mostra o código acima o MvcHandler usa uma instância da interface IControllerFactory e tenta obter uma instância de IController. Havendo sucesso o método Execute é chamado e a interface IControllerFactory poderia ser uma a factory controller padrão ou uma factory customizada no evento Application_Start, conforme mostra o código a seguir:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RegisterRoutes(RouteTable.Routes);
    ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory());
}

O Framework ASP .NET MVC mapeia URLs para classes que são referenciadas como Controllers que processam a requisição solicitada.

4- Action Execution

Uma vez que o controlador tenha sido instanciado, a ActionInvoker do Controlador determina qual Action específica deve ser invocada no controlador. A Action a ser executada é escolhida com base nos atributos :

1- ActionNameSelectorAttribute - Pelo método padrão que tem o mesmo nome que a Action que é escolhida.
2- ActionMethodSelectorAttribute - Se mais de um método for encontrado, o correto é escolhido com a ajuda deste atributo.

5 - View Result

O método Action recebe a entrada do usuário, prepara os dados de resposta adequados, e, em seguida, executa o resultado, retornando um result type (tipo de resultado).

A ViewResult representa uma classe que é usada para processar a view usando uma instância de IView que retornada por um objeto IViewEngine.

O tipo de resultado pode ser ViewResult, RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, FileResult e EmptyResult.

6- View Engine

O primeiro passo na execução da View Result envolve a seleção da View Engine adequada para processar a exibição do resultado(View Result). Ele é tratado pela interface IViewEngine do mecanismo de exibição. Por padrão a ASP.NET MVC utiliza as view engines WebForm e Razor. Você também pode registrar sua própria view engine (motor de exibição) personalizada para a sua aplicação ASP.NET MVC como mostrado abaixo:

protected void Application_Start()
{
   //Remove todas as View Engine incluindo a Webform e a Razor
    ViewEngines.Engines.Clear();
    //Registra a sua view engine customizada

    ViewEngines.Engines.Add(new ViewEnginePersonalizada());
    ...
}

Nota: Existem ainda as seguintes view engines que podem ser usadas: Spark e NHaml.

7- View

O método Action pode retornar uma cadeia de texto(string), um arquivo binário ou um conjunto de dados Json formatados. A mais importante Action Result é a ViewResult, a qual processa e retorna uma página HTML para o navegador usando o mecanismo de exibição atual.

As views (visões) são os componentes que exibem a interface do usuário e em geral são criadas a partir do Model.

A arquitetura MVC é triangular: a view envia atualizações para o controlador, o controlador atualiza o modelo, e a view é atualizada diretamente do modelo.

Veja os Destaques e novidades do SUPER DVD Visual Basic 2013 (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Rom 8:27 E aquele que esquadrinha os corações sabe qual é a intenção do Espírito: que ele, segundo a vontade de Deus, intercede pelos santos.

Rom 8:28 E sabemos que todas as coisas concorrem para o bem daqueles que amam a Deus, daqueles que são chamados segundo o seu propósito.

Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti