O que é ASP.NET Routing?

Roteando páginas com ASP.NET
É uma tecnologia do ASP.NET para realização das rotas. Através de customizações do global.asax o roteamento é possível.

Quais os principais conceitos relacionados ao ASP.NET Routing?

Como o HTTP trabalha com Rotas?
O que é Global.asax

Como seria uma aplicação de exemplo do ASP.NET Routing?
A seguir você poderá ver um exemplo de aplicação utilizando o ASP.NET Routing no cenário:
  • Windows 7
  • Visual Studio 2010
  • Aplicação Web Forms
  • NET 4
Primeiro passo: Customizando o WebConfig
Adicione o módulo de rota e o handle para rota, conforme indica a figura.
Alterando o web.config para trabalhar com Rotas Customizadas


Segundo passo: Customizando o Global.asax
No ApplicationStart adicione as rotas desejadas, utilizando o routes do System.Web.Routing.
Alterando o global.asax para trabalhar com Rotas Customizadas


Terceiro passo: Criando uma página de exemplo para rota
Nesta página de exemplo repare a utilização do RouteData[string]. Ele é um tipo de dicionário com as variáveis que compõe o nome da rota. Estas variáveis foram indicadas no segundo passo entre chaves.
Criando uma página de exemplo para Rotas Customizadas


Quarto passo: Verificando se funcionou

Abra o site e coloque uma endereço que seja passado por alguma rota disponível. Se funcionar, meus parabéns! Se não, poste aí!
Vendo o Resultado da página com Rotas Customizadas

O que é o Global.asax em ASP.NET?

Trabalhando com o global.asax
O Global.asax é um arquivo especial do ASP.NET que não pode ser baixado pelo usuário que acessa o site. De maneira opcional o programador pode escolher colocar este arquivo na aplicação. Este arquivo possui eventos do nível de aplicação e sessão (das camadas OSI).

Customizando o global.asax é possível fazer um site em ASP.NET que trate dinamicamente qual rota terá a solicitação realizada, por exemplo.

Como o protocolo HTTP trabalha com rotas?

Hyper Text Transfer Protocol e Rotas
O protocolo HTTP é utilizado para transferência do recursos através de solicitações. Recursos são quaisquer elementos trafegados , como documentos. E solicitações são comandos enviados do cliente para o servidor HTTP.

As solicitações são feitas através de verbos como GET, POST, PUT, DELETE, entre vários outros. E estas solicitações têm vários parâmetros, dentre eles o recurso a se trabalhado. Por exemplo:
GET /index.html?userid=anselme&password=it200* HTTP/1.1
Host: www.anselmeit.com
User-Agent: Mozilla/4.0

O endereço citado na linha HOST corresponde ao URL (Uniform Resource Locator) do destino e o endereço citado no GET corresponde ao URN (Uniform Resource Name) do endereço. Juntos são o URI (Uniform Resource Identifier) do recurso.

O cliente faz a solicitação e cabe ao servidor responder a esta solicitação. É neste momento que ocorre o roteamento. O Servidor é o responsável por entregar o recurso solicitado. O Servidor pode procurar por este recurso no disco (maneira mais comum), pode procurar no banco de dados, pode obter de outras fontes, pode até mesmo gerar o recurso dinamicamente.

O que é Razor no ASP.NET MVC 3?

Razor com ASP.NET MVC 3
Razor é uma View Engine criada pela equipe do ASP.NET para codificação da View de páginas ASP.NET. O próprio ASP.NET possui uma View Engine padrão, mas o Razor se mostra bastante eficiente. Existem outras View Engines, como NHaml ou Spark.


Onde encontro um exemplo de aplicação com Razor?
O Razor é bastante potente e dá suporte a inúmeras necessidades da View. Veja uma View básica:
@{
    string variavel = "Uma variável";
}
<b>@variavel</b>

É possível utilizar estruturas de programação junto a códigos HTML.
@{
    string variavel = "Uma variável";
    List usuarios = new List()
    {
        "José",
        "João",
        "Ana",
        "Julia"
    };
}

<h1>@variavel<h1>

@foreach (string usuario in usuarios)
{
    <i>Nome: <b>@usuario</b></i>

}

O Razor possui algumas estruturas características com benefícios específicos. Alguns exemplos comuns são: @RenderPage, @RenderBody, @RenderSection(), @PageData e @Helper.

A @RenderPage é uma Razor Global Helper que exibe uma View em específico. Tem função semelhante a Html.RenderParcial().

A @RenderBody é outra Razor Global Helper. Ela exibe o conteúdo de uma View. A View _Layout pode ter uma menção ao @RenderBody que é substituída por uma View específica quando utilizada. Isto lembra o Content Place Holder de uma Master Page.

A @RenderSection() é outra Razor Global Helper. Esta estrutura renderiza um bloco de código chamado de seção, que nada tem a ver com a seção do servidor web. Veja um exemplo:
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
</head>

<body>
@section top{<h1>Teste de Seção</h1>}

<div id="header">
@RenderSection("top")
</div>

<div id="main">
@RenderBody()
</div>
</body>
</html>

A @PageData é outra Razor Global Helper. A @PageData exibe dados. Ela é uma Lista de pares de chave-valor (KeyValuePair<object, dynamic>). Ela é utilizada para ter dados que sejam trabalhados por entre as Views. Os dados da @PageData não são persistidos. Para a persistência destes dados devem-se utilizar as técnicas conhecidas (como Querystring, Form fields, Cookies, Session) ou outras quaisquer.

A @Helper é uma Razor Global Helper que armazena várias helpers específicas. Helpers são funções para auxiliar na programação ou desenho de uma View. Existem helpers disponíveis para download, construídos por terceiros, como os de integração com o Twitter (@Helper.FollowButton()).

ASP.NET é compilado?


Sim, os sites escritos em qualquer linguagem da arquitetura do .NET Framework são compilados. Mas vários detalhes estão envolvidos.

Antes de tudo as páginas em ASP.NET são compiladas e são geradas DLLs. As DLL são geradas num código intermediário da Microsoft chamado MSIL (Microsoft Intermediate Language). Um mesmo site pode gerar uma ou mais DLLs. Em tempo de execução o .NET Framework traduz as instruções escritas em código intermediário para as instruções específicas do processador.

Existem alguns benefícios em compilar a página gerando DLL. As principais vantagens são Desempenho, Segurança, Estabilidade e Interoperabilidade. Nas DLLs os códigos são otimizados no momento da compilação, não criando este overhead em tempo de execução. Técnicas como engenharia reversa são dificultadas, além de ser possível fazer o ofuscamento das DLLs. A sintaxe contida nas DLLs é validada antes da compilação, que garante maior estabilidade do código a ser interpretado. E além de todo isto, as DLLs são interoperáveis, acessíveis por outras linguagens ou plataformas.

Existem algumas vantagens que são herdadas do próprio .NET Framework, como a capacidade de ter um mesmo projeto escrito em diversas linguagens de programação diferentes, se compatíveis a CLS (Commom Language Specifications). Com isto, um mesmo projeto pode ser desenvolvido por equipes diferentes, que programem ao mesmo tempo em C# e VB.NET

Os sites ASP.NET podem ser automaticamente compilados. Em toda primeira execução de um site ASP.NET, seus códigos e recursos ainda não pré-compilados são compilados. Normalmente o primeiro acesso a sites ASP.NET são mais lentos devido a este recurso.
Se seu site ASP.NET for pré-compilado não ocorrerá nenhuma compilação automática. A compilação automática pode facilitar o Deployment em diversos servidores, mas a pré-compilação evita grandes lentidões provenientes do primeiro acesso.
É possível pré-compilar seu site com a linha de comando ASPNET_compiler.exe, que dá
suporte a algumas opções:

In-Place Compilation
Realiza a mesma compilação que seria feita pelo processo dinâmico, em tempo de execução. Esta opção é válida quando o seu site já está em produção.

Non-updatable full precompilation
Esta forma de compilação deve ser utilizada para implantação em produção. Tudo é pré-compilado. As páginas ASPX também fazem parte do pacote gerado, mas não são editáveis.

Updatable precompilation

Semelhante ao non-updatable full precompilation, mas com a possibilidade de alterar os arquivos .ASPX gerados.

O que é ASP.NET?


ASP.NET é uma plataforma de desenvolvimento de sites e aplicações web. Criada pela Microsoft com base no .NET Framework oferece um grande leque de características para a provisão de sites. O Visual Studio .NET é a principal ferramenta de desenvolvimento para aplicações na plataforma .NET. É possível ainda criar sites com ferramentas gratuitas com o Visual Web Developer ou com o SharpDeveloper.

Existem implementações de estilos arquiteturais e estruturas específicas em cima do ASP.NET que trazem benefícios e características próprias. As principais estruturas de mercado hoje são ASP.NET WebForms e ASP.NET MVC.

Independentemente do estilo arquitetural, várias problemáticas acompanham a web como a criação de páginas que funcionem em todos os clientes, necessidade de entendimento de infraestrutura e protocolos HTTP / HTTPS, escalabilidade e segurança.

Os sites escritos em .NET comumente recebem a extensão .ASPX tornando fácil sua identificação. O ASP.NET prove de maneira mais eficiente recursos caraterísticos do protocolo HTTP quando hospedado no servidor Internet Information Server (IIS). Mas também pode ser portado para o APACHE com plugings de terceiros.

Hospedadas no IIS, página construídas em sites com ASP.NET WebForms são baseadas em formulários, com dinâmica semelhante à de aplicações Desktop. Assim como plataformas antigas como DELPHI, VB6, o ASP.NET WebForms tem foco na produtividade e na minimização do tempo médio de aprendizado, que pode ser bastante lucrativo, quando a qualidade não é o principal objetivo dos negócios.

Como o ASP.NET funciona sobre a arquitetura do .NET Framework, sua estrutura de funcionamento é baseado no paradigma orientado a objetos. Com isto, suas estruturas são baseadas em objetos com ciclos de vida próprios chamados Controles Web. Poderosos e extensíveis dão suporte a muitas necessidades comuns para aplicações web. Vale deixar claro que quanto maior a Automatização menor é a Flexibilidade, desta forma pode ser bastante penoso fazer extensões nos controles web existentes.

As páginas web funcionam de uma maneira bem peculiar: Toda comunicação é desconectada. Isto cria uma série de complicadores característicos como a complexa manutenção de estado. O ASP.NET WebForms faz automaticamente a manutenção do estado das páginas e controles com um custo de desempenho que deve ser controlado.

O desenvolvimento de páginas ASP.NET possui uma importante característica para separação dos interesses chamada Code-Behind. Com este recurso a página fica totalmente isolada da codificação de seus controles. Esta tecnologia é opcional mas é fortemente recomendada.  Outra tecnologia interessante é a MasterPage. Características visuais comuns a todas às páginas podem ser centralizadas numa masterPage e utilizadas em todas as paginas facilitando a manutenção.

As páginas construídas em ASP.NET possuem estruturas prontas para configuração como os arquivos GLOBAL.ASAX e WEB.CONFIG. Com estes arquivos é possível fazer controles característicos nas solicitações HTTP que chegam ao servidor HTTP, e parâmetros próprios da aplicação como String de Conexão ao banco de dados, nomes de usuários e outros. O Servidor IIS é preparado para entender estes arquivos como especiais. O próprio IIS possui arquivos de configuração como o MACHINE.config que tem características do WEB.config que velem para todas as aplicações web instaladas nele.