159
 NPDS TUTORIAL DE ASP.NET Página 1 C uiab á , 23 de A g osto de 2005 , 12:17 Documento: TIPX-1 Tutorial de ASP.NET

Tutorial ASP Net 2

  • Upload
    wederfs

  • View
    242

  • Download
    0

Embed Size (px)

Citation preview

T u t o r i a l d e A S P. N E T

NPDSTUTORIAL ASP.NET

DE

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 1

T u t o r i a l d e A S P. N E T

ndice

Lio 1: Introduo ao ASP.NET.......................................................................... 4 Introduo....................................................................................................... 4 O projeto Web Application.................................................................................. 5 Editando um Web Form em modo grfico.............................................................. 6 Sumrio.......................................................................................................... 7 Lio 2: Controles ASP.NET..................................................................................8 HTML Controls e Web Controls............................................................................ 8 Os Controles HTML............................................................................................ 9 Os Web Controls ............................................................................................ 13 Controles de ao........................................................................................ 13 Especificando comandos de aes.............................................................. 18 Controles de edio de dados........................................................................ 23 Controles de seleo.................................................................................... 30 Controles variados....................................................................................... 40 Sumrio......................................................................................................... 45 Lio 3: Trabalhando com estilos.......................................................................46 Capacidades do navegador .............................................................................. 46 Layout da pgina............................................................................................ 50 Uso de Panels................................................................................................. 51 Estilos em .NET............................................................................................... 54 Adicionando arquivos CSS ao projeto.............................................................. 55 O atributo Style........................................................................................... 55 As propriedades de controles......................................................................... 56 Escolhendo que tipo de estilo utilizar.............................................................. 56 Sumrio......................................................................................................... 57 Lio 4: Validao de dados...............................................................................58 Introduo..................................................................................................... 58 Os controles de validao................................................................................. 58 Sumrio......................................................................................................... 62 Lio 5: Acesso a bancos de dados.................................................................... 64 Relembrando ADO.NET..................................................................................... 64 Visualizando os dados de banco de dados........................................................... 65 Atualizando dados do banco.............................................................................. 69 Utilizando dados desconectados......................................................................... 73 Os controles DataList e DataGrid....................................................................... 77 Lio 6: Ciclo de vida de pgina e controles.....................................................100 O modelo de pgina de ASP.NET...................................................................... 100 O ciclo de vida de uma pgina ASP.NET............................................................ 100 O ciclo de vida de uma pgina......................................................................... 103 Sumrio ...................................................................................................... 108 Lio 7: Mantendo dados entre requisies..................................................... 109 Introduo................................................................................................... 109 Permanncia de dados de usurio no cliente...................................................... 109 View State................................................................................................ 109

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 2

T u t o r i a l d e A S P. N E T

Campos de formulrio escondidos................................................................ 112 Cookies.................................................................................................... 114 Strings de endereo................................................................................... 115 Permanncia de dados de usurio no servidor.................................................... 117 Estado de Aplicao................................................................................... 118 Estado de Sesso....................................................................................... 120 Suporte a banco de dados .......................................................................... 123 Redirecionando usurios para outra pgina....................................................... 124 Redirecionando pginas via servidor............................................................. 124 Redirecionando pginas via navegador.......................................................... 124 Sumrio....................................................................................................... 125 Lio 8: Utilizando scripts de cliente................................................................126 Introduo................................................................................................... 126 Incluindo scripts de cliente em Web Forms........................................................ 127 Incluindo scripts de cliente em Web Forms........................................................ 127 Incluindo scripts atravs de programao...................................................... 128 Gerando componentes customizados............................................................ 130 Escolhendo o mtodo de gerao de scripts de cliente......................................... 130 Sumrio....................................................................................................... 132 Lio 9: Controlando dados de requisio e resposta.......................................134 Introduo................................................................................................... 134 O modelo ASP.NET......................................................................................... 135 O objeto Request........................................................................................... 136 O objeto Response......................................................................................... 138 Sumrio....................................................................................................... 138 Lio 10: Utilizao de cookies........................................................................ 139 Introduo................................................................................................... 139 Cookies em ASP.NET...................................................................................... 139 Criar cookies............................................................................................. 140 Ler um cookie........................................................................................... 140 Apagar um cookie...................................................................................... 140 Lio 11: Configuraes de segurana.............................................................144 Introduo................................................................................................... 144 Segurana de senhas..................................................................................... 144 Conexo com o usurio.................................................................................. 147 Validao de dados........................................................................................ 148 Logging........................................................................................................ 150 Controle de acesso........................................................................................ 151 Autenticao............................................................................................. 151 Autorizao............................................................................................... 154 Sumrio....................................................................................................... 156 Lio 12: Utilizao de cache...........................................................................157 Introduo................................................................................................... 157 Fazendo cache de pginas inteiras................................................................... 157 Cacheabilidade.......................................................................................... 158 Sumrio....................................................................................................... 159

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 3

T u t o r i a l d e A S P. N E T

Lio 1: Introduo ao ASP.NET

Esta lio mostra os entendimentos bsicos de ASP.NET. Os objetivos so:

Apresentar os conceitos iniciais de ASP.NET Mostrar como criar um projeto ASP.NET no Visual Studio Apresentar o bsico da edio de um Web Form ASP.NET

Introduo ASP.NET uma tecnologia da Microsoft para desenvolvimento de aplicaes Web. Ele composto de uma nova arquitetura que pretende reduzir o tempo de desenvolvimento desses tipos de aplicao. O ASP.NET embutido no Framework .NET da Microsoft, e aplicaes ASP.NET precisam do Framework para serem executadas. Uma aplicao ASP.NET necessita de um servidor IIS (Internet Information Services) verso 5.0 ou superior para ser acessada. As aplicaes ASP.NET rodam em um servidor e podem ser acessadas de qualquer navegador/sistema operacional sem qualquer requerimento especfico. Atualmente, muito comum aplicaes Web serem programadas por meio de scripts, como ASP ou PHP. Tais linguagens tem o modelo procedural, bastante conhecido por programadores. Este modelo funciona na base do pr-processamento: o interpretador do script l o arquivo de script, passando pelo cdigo HTML, e quando encontra uma tag de script, ele executa o cdigo. Algumas dificuldades surgem quando se programa neste modelo. Em primeiro lugar, existe a mistura entre a apresentao com o cdigo de programao. Por exemplo, para mostrar uma caixa de combinao com dados carregados de um banco de dados, normalmente voc mistura o cdigo de programao com cdigo de HTML. Isso gera uma dificuldade para separar tarefas e modularizar corretamente o software. Em softwares grandes, com equipes grandes, o modelo procedural exige maior trabalho na modelagem do sistema, muitas vezes por causa da falta de reaproveitamento de cdigo de interface e da incompatibilidade do modelo procedural da aplicao com o modelo orientado a objeto da interface (HTML). ASP.NET tenta suprimir esses problema, oferecendo uma arquitetura e uma interface de desenvolvimento rpido. A pgina no mais um script ou arquivo escrito em linguagem procedural; ao invs disso, uma classe que possui propriedades e eventos. A pgina compilada e executada quando requisitada pelo usurio. Todos os componentes da pgina (caixas de texto, botes, etc.) so objetos compilados. Seus eventos so executados no servidor. Um projeto ASP.NET totalmente orientado a objeto, e isso permite uma modelagem mais facilitada, ou pelo menos mais moderna, do que o modelo procedural. Alm disso, existe uma separao mais clara do que interface e o que cdigo de programao, permitindo uma melhor diviso de tarefas.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 4

T u t o r i a l d e A S P. N E T

A interface de desenvolvimento privilegia o desenvolvimento rpido. Ela muito semelhante s interfaces de desenvolvimento para desktop bem conhecidas como Delphi, Net Beans, e o prprio Visual Studio. As linguagens de desenvolvimento de cdigo de programao para ASP.NET podem ser qualquer uma que o .NET suporte, como VB.NET e C#. A linguagem de apresentao o ASP.NET. Neste tutorial, estar sendo usado o C#.

O projeto Web Application Para iniciar o tutorial, vamos a um exemplo prtico, criando o projeto Web Application no Visual Studio. Com o Visual Studio aberto, selecione o menu File, na opo New e Project. A tela New Project ir abrir. Selecione o Project Types para Visual C# Projects, e escolha ASP.NET Web Application para Templates. Escolha um nome para o projeto e clique em OK. Uma coisa a se notar na janela de New Project a localizao do projeto. Por padro, ela sempre uma pasta com o mesmo nome do projeto na raiz do servidor Web instalado na mquina. Este endereo padro pode ser modificado, mas ele precisa ser acessvel pelo IIS para que o projeto possa ser criado. Quando um projeto Web Application criado, ele automaticamente cria alguns arquivos dentro do projeto. Os principais so:

Global.asax Este arquivo um arquivo de cdigo que configura os eventos principais da aplicao, como eventos de incio e fim da aplicao e de sesses de usurio. S h um por projeto. Web.config Este arquivo configura vrios aspectos da aplicao, como mtodos de autenticao, mtodos de manuteno de estado de sesso e mtodos de tracing da aplicao. Um arquivo Web.config configura a aplicao na pasta onde est e todas as suas sub-pastas. Mas voc pode configurar a aplicao de mtodo diferente para cada pasta da aplicao. WebForm1.aspx Este um Web Form. Os Web Forms so os principais componentes de uma aplicao ASP.NET. Elas correspondem as pginas HTML montadas dinamicamente. Um Web Form, na ver, so formados por dois arquivos: Arquivo de apresentao O arquivo de apresentao contm as informaes de layout da pgina. Ele escrito em ASP.NET e tem a extenso ASPX. ASP.NET muito semelhante a HTML, com algumas tags especficas de ASP.NET. nele que esto definidos os objetos de tela, botes, caixas de texto, menus, imagens, scripts, etc. O arquivo de apresentao indica um arquivo de cdigo que ir ser executado para responder os eventos de cada componente da tela.

Arquivo de cdigo O arquivo de cdigo contm o cdigo de programao utilizado para responder aos eventos da pgina e dos componentes da pgina. Ele compilado e armazenado no servidor Web em formas de dll. Ele executado em momentos como resposta a um clique de boto do usurio, uma mudana do item selecionado na caixa deCuiab, 23 de Agosto de 2005, 12:17 Documento: TIPX-1 Pgina 5

T u t o r i a l d e A S P. N E T

combinao ou quando a pgina carregada. O cdigo pode ser escrito em qualquer linguagem suportada pelo .NET Framework. O Visual Studio abre o arquivo WebForm1.aspx para edio em modo grfico. possvel visualizar o cdigo ASP.NET clicando no boto HTML, na parte inferior da pgina.

Editando um Web Form em modo grfico Vamos mostrar um exemplo de como se pode criar uma pgina interativa utilizando-se o designer grfico. 1. A partir da Toolbox do Visual Studio posicione um controle Button e um controle TextBox na pgina. 2. Selecione o Button e configure a propriedade Text para Clique. A propriedade pode ser modificada na janela Properties 3. Faa um duplo clique no boto. O arquivo WebForm1.aspx.cs ser aberto para edio. O arquivo WebForm1.aspx.cs o arquivo de cdigo relacionado com o arquivo WebForm1.aspx para responder aos eventos da pgina e dos componentes. 4. Neste caso, o Visual Studio automaticamente cria um mtodo para responder ao evento de clique do boto. Entre as chaves, escreva o seguinte cdigo: TextBox1.Text = "Hello, World"; 5. Execute o projeto teclando F5, e clique no boto Clique. O que se pode observar que, diferentemente das linguagens procedurais normalmente utilizadas para criar aplicaes Web, ASP.NET possui uma arquitetura bastante diferente, oferecendo ao desenvolvedor uma interface desenvolvimento mais parecida com o desenvolvimento desktop. O cdigo deste programa o seguinte: Listagem 1.1: Exemplo de um Web Form

Arquivo Listagem01_01.aspx

WebForm1

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 6

T u t o r i a l d e A S P. N E T

Arquivo Listagem01_01.aspx.cs System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

using using using using using using using using using using

namespace Listagem1_1 { public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.TextBox TextBox1; protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Button1.Click += System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Button1_Click(object sender, System.EventArgs e) { TextBox1.Text = "Hello, World"; }

new

}

}

Nas prximas lies, estaremos falando mais sobre os controles que podem ser colocados em uma pgina ASP.NET e como ASP.NET funciona por trs das cmeras.

Sumrio Nesta lio, voc aprendeu um pouco sobre o que ASP.NET e como ela procura resolver alguns problemas relacionados ao desenvolvimento Web. Voc aprendeu a criar um novo projeto ASP.NET no Visual Studio e foi apresentado aos editores grfico e texto da apresentao, e ao editor de cdigo de programao.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 7

T u t o r i a l d e A S P. N E T

Lio 2: Controles ASP.NET

Controles so os elementos de tela que voc pode adicionar a uma pgina ASP.NET. Esta lio mostra alguns dos controles mais comuns j inclusos com o .NET Framework. Os objetivos da lio so:

Apresentar Apresentar Apresentar Apresentar Apresentar Apresentar

as diferenas entre HTML Controls e Web Controls os HTML Controls os Web Controls de ao os Web Controls de edio de dados os Web Controls de seleo outros Web Controls relevantes

HTML Controls e Web Controls Os controles prontos de ASP.NET se dividem em dois grupos: os HTML Controls e os Web Controls. Estes controles so elementos para serem inseridos em tela, e so sempre classes do Framework .NET. Portanto, estes objetos rodam no servidor e podem ter suas propriedades modificados por meio de programao. Esses controles podem ser definidos dinamicamente, por meio de cdigo em tempo de execuo, ou em tempo de projeto de interface.

HTML Controls

Normalmente, os elementos HTML so opacos ao servidor, eles so passados diretamente para o navegador. ASP.NET mapeou alguns deles para que possam ser programveis no servidor. Os objetos tm as propriedades quase correspondentes ao elemento HTML real. Os controles HTML de servidor so objetos ASP.NET que mapeiam os elementos HTML, e portanto, so visveis e programveis no servidor. Os controles HTML possuem as seguintes caractersticas:

O modelo de objetos programvel com tcnicas orientadas a objeto familiares Os eventos dos elementos podem ser escritos da mesma forma como se faz para forms baseados em cliente, s que os eventos so manipulados no servidor possvel manipular eventos com scripts de cliente A manuteno do estado do evento automtica (os valores so preservados entre round trips) possvel utilizar controles de validao com controles HTML possvel bindar dados com controles HTML Suporta estilos com CSS possvel adiconar mais atributos ao objeto

Web Controls

Os controles de servidor web (Web Controls) so um conjunto de controles com nfase diferente. Eles definem controles abstratos que tm algum objetivo na pgina, e, porventura, podem gerar elementos HTML diferentes, de acordo com as propriedades configuradas para ele. Por exemplo, o controle RadioButtonList pode ser gerado em umaCuiab, 23 de Agosto de 2005, 12:17 Documento: TIPX-1 Pgina 8

T u t o r i a l d e A S P. N E T

tabela ou em HTML inline, de acordo com suas propriedades. O controle TextBox pode gerar um input do tipo text ou um textarea, de acordo com a propriedade TextMode. Existem controles simples que geram elementos bsicos como caixas de texto e botes, e existem elementos mais complexos como grid de dados, tabelas, etc. Os controles de servidor web possuem as seguintes caractersticas:

Modelo de objetos rico Deteco automtica de navegador o controle detecta as capacidades do navegador e renderiza HTML de acordo Para alguns controles, possvel definir quando ser realizado o postback (envio de dados) se imediato ou cacheado para a submisso do form A habilidade de passar eventos para controles aninhados (como um boto em uma tabela)

Os Web Controls e os HTML Controls, por terem caractersticas diferentes, so utilizados com diferentes propsitos. Abaixo est uma tabela comparativa entre os controles:

Utilizando controles HTML de servidor (HTML Controls)

Vantagens: O modelo de objetos parecido com o HTML Uma pgina escrita em HTML pode ser passada rapidamente para ASP.NET A interao com scripts mais simples, sem criao de controles complexos mais simples escrever scripts de cliente para controles HTML A sintaxe ASP.NET para criar controles HTML mais amigvel para web designers Desvantagens Todas as propriedades so strings, no h checagem de tipo H suporte para navegadores mais modernos, mas no h deteco automtica de navegador

Utilizando controles Web de servidor (Web Controls)

Vantagens: O modelo de objetos similar a qualquer objeto .NET A pgina pode ser visualizada em navegadores diferentes possvel utilizar um controles especializados, como calendrio e banner dinmico possvel um melhor controle na checagem de erro e uma programao mais limpa possvel criar controles mais complexos e ricos O Framework .NET identifica o navegador do cliente e gera o cdigo adaptado para as capacidades do navegador Desvantagens: mais difcil controlar o modo como o controle ir ser renderizado em HTML mais difcil customizar um controle

Os Controles HTML

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 9

T u t o r i a l d e A S P. N E T

Os HTML Controls so objetos .NET que foram modelados (propriedades) de forma a representar um elemento HTML. Existem diversos tipos de controles HTML, cada um mapeando um tipo diferente de elemento HTML. Os objetos HTML Controls so encontrados no namespace System.Web.UI.HtmlControls. Voc pode criar um objeto HTML Control programacionalmente simplesmente instanciando a classe especfica. Por exemplo, para criar uma caixa de texto via programao, voc pode realizar o seguinte: HtmlInputText txt = new HtmlInputText(); txt.Style.Add("position", "absolute"); txt.Style.Add("top", "100px"); txt.Style.Add("left", "100px"); this.Controls.Add(txt); Se voc colocar este cdigo no evento de Load da pgina, ele ir colocar um elemento input do tipo text na pgina. Note que o objeto HtmlInputText possui propriedades que voc encontra no elemento HTML (Style). De fato, quando visualizado, este trecho de cdigo adiciona o seguinte HTML em sua pgina: 0) Label4.Text = "Um e-mail de boas vindas foi }

new

enviado"; } }

RadioButton

O RadioButton um controle que oferece ao usurio uma opo que pode ser escolhida. Mas ao contrrio do CheckBox, o RadioButton normalmente utilizado em conjunto com vrios, para que o usurio escolha uma entre vrias opes. Da mesma forma que o CheckBox, voc pode verificar o estado marcado/desmarcado do controle RadioButton atravs da propriedade Checked. S que ao contrrio de CheckBox, voc no pode desmarcar um RadioButton clicando sobre ele novamente. Para desmarcar um RadioButton voc precisa selecionar outro RadioButton do mesmo grupo. Voc agrupa controles do tipo RadioButton utilizando a propriedade Group. Os controles com mesmo Group configurado sero auto-excludentes. RadioButton tambm possui uma propriedade CheckedChanged, que disparado quando o estado de marcado/desmarcado do controle muda. Voc pode configurar a propriedade AutoPostBack para executar o cdigo de evento assim que ele acontece, ou esperar pela submisso da pgina pelo usurio. ReadOnly faz com que controle no possa ser alterado. Enabled faz com que o controle aparea desabilitado no cliente, se for configurado como false. A listagem 2.9 mostra um exemplo que utiliza RadioButton. Listagem 2.9: O controle RadioButton

Arquivo Listagem02_09.aspx

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 28

T u t o r i a l d e A S P. N E T

WebForm1 Sexo: Idade: Enviar

Arquivo Listagem02_09.aspx.cs

using using using using using using using using using using

System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

namespace Listagem02_09 { public class WebForm1 : System.Web.UI.Page {

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 29

T u t o r i a l d e A S P. N E T

protected protected protected protected protected protected protected protected protected protected

System.Web.UI.WebControls.RadioButton rbSexMasc; System.Web.UI.WebControls.RadioButton rbSexFem; System.Web.UI.WebControls.Label Label2; System.Web.UI.WebControls.RadioButton rbIdMenor; System.Web.UI.WebControls.RadioButton rbIdAdulto; System.Web.UI.WebControls.RadioButton rbIdIdoso; System.Web.UI.WebControls.LinkButton LinkButton1; System.Web.UI.WebControls.Label Label3; System.Web.UI.WebControls.Label Label4; System.Web.UI.WebControls.Label Label1;

private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.LinkButton1.Click += System.EventHandler(this.LinkButton1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion e) private void LinkButton1_Click(object sender, System.EventArgs { if (rbSexFem.Checked) Label3.Text = rbSexFem.Text; else if (rbSexMasc.Checked) Label3.Text = rbSexMasc.Text; if (rbIdAdulto.Checked) Label4.Text = rbIdAdulto.Text; else if (rbIdIdoso.Checked) Label4.Text = rbIdIdoso.Text; else if (rbIdMenor.Checked) Label4.Text = rbIdMenor.Text;

new

}

}

}

A propriedade Group ajuda a separar os diferentes itens em grupos lgicos (Sexo e Idade). Voc pode notar no mtodo LinkButton1_Click() que a manipulao para avaliar se um controle est ou no marcado feita item a item. No h um mecanismo rpido para avaliar qual controle do grupo est marcado. Para ter essa facilidade, voc pode usar o controle RadioButtonList, explicado mais frente.

Controles de seleo

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 30

T u t o r i a l d e A S P. N E T

CheckBoxList

Se voc precisa mostrar uma coleo de controles CheckBox agrupados de alguma forma, voc pode utilizar o controle CheckBoxList. Este controle mostra uma lista de controles CheckBox que podem ser marcados e desmarcados. A principal propriedade de CheckBoxList Items, que uma coleo de controles CheckBox. Portanto, voc pode iterar nessa propriedade para saber o estado de marcado (Checked) de cada item. Voc pode adicionar e remover novos itens da forma que for necessrio, com os mtodos Add() e Remove() da propriedade Items. Voc pode modificar o layout do controle alterando as propriedades RepeatLayout, RepeatDirection e RepeatColumns. RepeatLayout indica como o controle ser criado em HTML, se com ajuda de tabelas (Table) ou sem tabelas (Flow). RepeatDirection indica se as opes sero mostradas no sentido horizontal (Horizontal) ou vertical (Vertical). Por fim, RepeatColumns indica em quantas colunas as opes estaro sendo mostradas. O principal evento de CheckBoxList SelectedIndexChanged. Ele disparado sempre que alguma opo da lista marcada ou desmarcada. A listagem 2.10 mostra um programa de exemplo com CheckBoxList. Listagem 2.10: O controle RadioButton

Arquivo Listagem02_10.aspx

WebForm1 Paraguai Uruguai Equador Guiana Francesa Quais dos pases abaixo no possuem fronteira com o oceano?

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 31

T u t o r i a l d e A S P. N E T

Arquivo Listagem02_10.aspx.cs

using using using using using using using using using using

System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

namespace Listagem02_10 { public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.CheckBoxList CheckBoxList1; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.Label Label1; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.CheckBoxList1.SelectedIndexChanged += System.EventHandler(this.CheckBoxList1_SelectedIndexChanged); this.Button1.Click += System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Button1_Click(object sender, System.EventArgs e) { if (CheckBoxList1.Items[0].Selected && CheckBoxList1.Items[1].Selected && !CheckBoxList1.Items[2].Selected && !CheckBoxList1.Items[3].Selected) Label2.Text = "Certa a resposta!"; else Label2.Text = "No, no isso."; } private void CheckBoxList1_SelectedIndexChanged(object sender, System.EventArgs e)

new new

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 32

T u t o r i a l d e A S P. N E T

{ } }

Response.Write("Opa");

}

RadioButtonList

De forma semelhante a CheckBoxList, RadioButtonList representa uma lista de opes auto-excludentes. Se voc for trabalhar com grupos de RadioButton, esta a forma mais simples e recomendada. A principal propriedade de RadioButtonList Items, que uma coleo de objetos RadioButton. Voc pode adicionar e remover novas opes na lista a qualquer momento, utilizando os mtodos Add() e Remove() da propriedade Items. Voc pode iterar entre os elementos de Items a procura do item marcado, mas a forma mais simples utilizar a propriedade SelectedIndex ou SelectedItem do objeto RadioButtonList para descobrir qual elemento est marcado. SelectedIndex retorna a posio do elemento que est marcado; SelectedItem retorna o item (RadioButton) marcado. Voc pode modificar o layout do controle alterando as propriedades RepeatLayout, RepeatDirection e RepeatColumns. RepeatLayout indica como o controle ser criado em HTML, se com ajuda de tabelas (Table) ou sem tabelas (Flow). RepeatDirection indica se as opes sero mostradas no sentido horizontal (Horizontal) ou vertical (Vertical). Por fim, RepeatColumns indica em quantas colunas as opes estaro sendo mostradas. O principal evento de RadioButtonList SelectedIndexChanged. Ele disparado sempre que a opo selecionada da lista modificada. A listagem 2.11 mostra um programa de exemplo com RadioButtonList. Listagem 2.11: O controle RadioButtonList

Arquivo Listagem02_11.aspx

WebForm1 Qual a capital do Brasil?

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 33

T u t o r i a l d e A S P. N E T

Braslia So Paulo Buenos Aires

Arquivo Listagem02_11.aspx.cs

using using using using using using using using using using

System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

namespace Listagem02_11 { public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.RadioButtonList RadioButtonList1; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Button1.Click += System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Button1_Click(object sender, System.EventArgs e) { if (RadioButtonList1.SelectedItem != null) {

new

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 34

T u t o r i a l d e A S P. N E T

"Braslia")

if else } }

(RadioButtonList1.SelectedItem.Text Label2.Text = "Certa a resposta!"; Label2.Text = "No. No isso.";

==

}

}

DropDownList

O controle DropDownList oferece uma lista do tipo menu suspenso, para que o usurio possa selecionar uma opo. Funciona como o o RadioButtonList, mas mais compacto. A principal propriedade do controle DropDownList SelectedItem. Este uma referncia para o item da lista que foi selecionado. J a propriedade Items funciona como no RadioButtonList, onde possvel adicionar e remover itens conforme for necessrio. O seu principal evento SelectedItemChanged. Ele ativado quando a opo selecionada no controle muda. Voc pode executar o cdigo do evento assim que ele ocorre configurando AutoPostBack como true. Se no, o evento s disparado quando o usurio submete a pgina. A listagem 2.12 mostra um exemplo com DropDownList. Listagem 2.12: O controle DropDowList.

Arquivo Listagem02_12.aspx

WebForm1 Estado: Cidade:

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 35

T u t o r i a l d e A S P. N E T

Arquivo Listagem02_12.aspx.cs

using using using using using using using using using using

System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

namespace Listagem02_12 { public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.DropDownList ddlEstados; protected System.Web.UI.WebControls.DropDownList ddlCidades; protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.Label Label3; protected System.Web.UI.WebControls.Label Label2; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here if (!IsPostBack) { CarregaEstados(); CarregaMunicipios(0); } } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.ddlEstados.SelectedIndexChanged += System.EventHandler(this.ddlEstados_SelectedIndexChanged); this.Button1.Click += System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void CarregaEstados() { ddlEstados.Items.Clear();

new new

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 36

T u t o r i a l d e A S P. N E T

}

ddlEstados.Items.Add("Mato Grosso"); ddlEstados.Items.Add("Mato Grosso do Sul");

private void CarregaMunicipios(int indice) { ddlCidades.Items.Clear(); switch (indice) { case 0: ddlCidades.Items.Add("Cuiab"); ddlCidades.Items.Add("Vrzea Grande"); break; case 1: ddlCidades.Items.Add("Campo Grande"); ddlCidades.Items.Add("Navira"); break; } } private void ddlEstados_SelectedIndexChanged(object System.EventArgs e) { CarregaMunicipios(ddlEstados.SelectedIndex); } sender,

private void Button1_Click(object sender, System.EventArgs e) { Label3.Text = ddlEstados.SelectedItem.Text +" "+ ddlCidades.SelectedItem.Text; } } } Na listagem acima, h dois DropDownLists: ddlCidades e ddlEstados. No mtodo de carregamento da pgina (Page_Load()), os controles so carregados com valores iniciais. possvel saber se o usurio est requisitando a pgina pela primeira vez, utilizando a expresso if (!IsPostBack) Quando o usurio modifica a seleo de Estado, o evento SelectedIndexChanged do controle disparado e carrega ddlCidades com as cidades do estado correspondentes. ddlEstados est configurado com AutoPostBack como true, assim, logo que o usurio faz a escolha, a pgina realiza um recarregamento e preenche o controle ddlCidades. ListBox

O controle ListBox mais um controle que permite ao usurio selecionar opes de uma lista. ListBox aparece como um menu na tela, com as opes mostra. A propriedade Items d acesso coleo de items do ListBox. possvel adicionar e remover os itens em tempo de execuo. Cada item de Items do tipo ListItem. ListItem possui uma propriedade Selected que nos permite verificar se o item est ou no selecionado.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 37

T u t o r i a l d e A S P. N E T

O principal evento de ListBox SelectedIndexChanged. Ele disparado sempre que alguma opo da lista marcada ou desmarcada. A listagem 2.13 mostra um programa de exemplo com ListBox. Listagem 2.13: O controle ListBox

Arquivo Listagem02_13.aspx

WebForm1 Abacate Banana Damasco Ma Pra Tomate Frutas disponveis Quitanda eletrnica Frutas a comprar

Arquivo Listagem02_13.aspx.cs

using System;

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 38

T u t o r i a l d e A S P. N E T

using using using using using using using using using

System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

namespace Listagem02_13 { public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.Label Label3; protected System.Web.UI.WebControls.Button Button1; protected System.Web.UI.WebControls.ListBox lbDisponivel; protected System.Web.UI.WebControls.ListBox lbSelecionado; protected System.Web.UI.WebControls.Button Button2; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Button1.Click += System.EventHandler(this.Button1_Click); this.Button2.Click += System.EventHandler(this.Button2_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Button1_Click(object sender, System.EventArgs e) { lbSelecionado.Items.Clear(); foreach (ListItem i in lbDisponivel.Items) { if (i.Selected) lbSelecionado.Items.Add(i); } } private void Button2_Click(object sender, System.EventArgs e) { for (int i = 0; i) NextMonthFormat: Indica o que ser mostrado como link para mudana de ms no calendrio. FullMonth mostra o nome completo do ms, ShortMonth mostra o nome do ms abreviado, CustomText mostra o contedo indicado na propriedade NextMonthText e PrevMonthText. S aparece se ShowNextPrevMonth estiver configurado para true PrevMonthText: O texto que ser mostrado como link para mudar para o ms anterior do calendrio. Padro: < (>) ShowDayHeader: Mostra (true) ou esconde (false) os dias da semana no calendrio. Padro: true ShowGridLines: Mostra (true) ou esconde (false) as linhas da tabela do Calendrio. Padro: false ShowNextPrevMonth: Mostra (true) ou esconde (false) os links para mudana de ms no calendrio. Padro: true ShowTitle: Mostra (true) ou esconde (false) o ttulo do calendrio, contendo o nome do ms e os links de mudana de ms TitleFormat: Indica como ser mostrado o ttulo (nome do ms). Month mostra apenas o ms, MonthYear mostra o ms e ano SelectionMode: Indica o que poder ser selecionado. None faz com que selees no sejam permitidas. Day permite selecionar apenas um dia, DayWeek permite selecionar um dia ou uma semana, DayWeekMonth permite selecionar uma dia, uma semana ou um ms SelectedDate: Permite indicar uma data para iniciar selecionada VisibleDate: Permite marcar uma data para servir de referncia para o usurio

Calendar permite uma customizao maior de estilos. possvel customizar independentemente o estilos dos dias, do ttulo, dos links de ms, dos dias do ms que no est ativo, dos dias da semana, do dia selecionado, do dia atual e dos dias de fim de semana. Os principais eventos de Calendar so:

SelectionChanged: Disparado quando o usurio seleciona uma nova data no calendrio VisibleMonthChanged: Disparado quando o usurio muda o ms mostrado no calendrio

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 43

T u t o r i a l d e A S P. N E T

A listagem 2.16 mostra um calendrio em ao. Listagem 2.16: O controle Calendrio

Arquivo Listagem02_16.aspx

WebForm1

Arquivo Listagem02_16.aspx.cs

using using using using using using using using using using

System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

namespace Listagem02_15 { public class WebForm1 : System.Web.UI.Page { protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.Calendar Calendar1;

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 44

T u t o r i a l d e A S P. N E T

private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Calendar1.VisibleMonthChanged += new System.Web.UI.WebControls.MonthChangedEventHandler(this.Calendar1_VisibleMo nthChanged); this.Calendar1.SelectionChanged += new System.EventHandler(this.Calendar1_SelectionChanged); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Calendar1_SelectionChanged(object System.EventArgs e) { Label1.Text = "Dia selecionado: Calendar1.SelectedDate.ToString(); } private void Calendar1_VisibleMonthChanged(object System.Web.UI.WebControls.MonthChangedEventArgs e) { Label2.Text = "Ms selecionado: e.NewDate.Month.ToString(); } } } sender, "+

sender, "+

Sumrio Nesta lio, voc aprendeu a utilizar os controles de ASP.NET. Voc sabe que os controles de dividem em HTML Controls e Web Controls. Os HTML Controls so controles que tm uma estrutura parecida com os elementos de HTML que eles geram. J os Web Controls so controles mais complexos que integram funcionalidades extras.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 45

T u t o r i a l d e A S P. N E T

Lio 3: Trabalhando com estilos

ASP.NET possui um bom framework para estilos. Nesta lio, vamos ressaltar alguns pontos que auxiliam a configurar um estilo para as pginas que voc criar. Os objetivos desta lio so:

Entender a atuao das capacidades do navegador na gerao de HTML Aprender a modificar o layout de um Web Form Entender como o ASP.NET trata estilos Aprender a linkar arquivos CSS a Web Forms Utilizar corretamente os diferentes modos de aplicar estilos em Web Forms

Capacidades do navegador ASP.NET possui uma arquitetura que permite identificar o navegador do cliente que est requisitando a pgina. Dessa forma, o ASP.NET pode gerar HTML especfico para as capacidades do navegador. Por exemplo, as configuraes de posio de um TextBox pode ser configurada na propriedade style do elemento gerado, ou nas propriedades width e height. Isso vai depender se o navegador do cliente suporta CSS ou no. O ASP.NET detecta as capacidades do navegador atravs do User Agent do navegador. O User Agent uma string enviada pelo navegador como cabealho de toda requisio que ele faz. Por exemplo, o Internet Explorer verso 6.0 SP1, em um Windows Xp com Service Pack 2 e .NET Framework 1.1, envia um User Agent dessa forma: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) Com as informaes enviadas no User Agent, o ASP.NET pode detectar as capacidades, e envia o resultado da deteco para a pgina e os controles, que vo gerar o HTML de acordo com esse resultado. Se voc sabe quais so os seus clientes, talvez voc queira evitar a deteco automtica, fazendo com que o a pgina e seus controles gerem HTML para um tipo especfico de navegador (na verdade, capacidades). O ASP.NET permite que voc selecione as capacidades de navegador com a propriedade clientTarget, do Web Form. Em clientTarget voc especifica um alias. O ASP.NET define 4 aliases que voc pode colocar em clientTarget, a saber:

ie5

Suporta frames Suporta tabelas Suporta cookies Suporta sons de fundo Suporta vbscript e javascript (1.2) Suporta applets Java e controles ActiveX Microsoft DOM verso 5.5 DOM W3C verso 1.0 Suporta CSS 1.0 e CSS 2.0

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 46

T u t o r i a l d e A S P. N E T

Suporta XML

ie4

Suporta frames Suporta tabelas Suporta cookies Suporta sons de fundo Suporta vbscript e javascript (1.2) Suporta applets Java e controles ActiveX Microsoft DOM verso 4.0 No suporta DOM W3C Suporta CSS 1.0, mas no CSS 2.0 No suporta XML

uplevel Igual a ie4 downlevel No suporta No suporta No suporta No suporta No suporta No suporta No suporta No suporta No suporta No suporta frames tabelas cookies sons de fundo vbscript ou javascript applets Java ou controles ActiveX Microsoft DOM DOM W3C CSS XML

O programa da listagem 3.1 mostra um Web Form que mostra as capacidades do navegador. Se voc configurar clientTarget como vazio, o ASP.NET detecta automaticamente as capacidades do navegador do cliente. No entanto, se voc configurar clientTarget para um dos valores de alias mostrados acima, as capacidades detectadas do navegador sero as mesmas, no importando o navegador do cliente. Isso til para situaes onde voc sabe qual o requisito mnimo de navegadores, ou para nivelar as capacidades. O ASP.NET no perfeito para detectar qualquer tipo de navegador. A Microsoft decidiu criar um arquivo que faz a configurao de acordo com o User Agent, ao invs de utilizar um servio on-line. O preo disso que este arquivo no est sendo atualizado, e novos navegadores no esto sendo corretamente detectados. Por exemplo, as verses novas de Firefox, Safari, Konqueror e Mozilla suportam XML, CSS e DOM, mas o ASP.NET no consegue detectar. A soluo mais correta atualizar o arquivo machine.config na mquina onde rodar a aplicao. Outra sada configurar clientTarget para um nvel mais alto, como ie5. Isso alivia as diferenas, uma vez que ie5 possui XML, CSS e DOM da W3C, mas pode gerar problemas, uma vez que inclui tambm o DOM da Microsoft. No programa da listagem 3.1 mostrado um Web Form que apresenta as configuraes de navegador detectadas pelo servidor ASP.NET. Sinta-se vontade para brincar um pouco com o Web Form. Acesse o Web Form com diferentes navegadores e veja como ele trata cada um. Modifique o valor de clientTarget para verificar como as configurapes detectadas permanecem imutveis. Listagem 3.1: Capacidades do navegador

Arquivo Listagem03_01.aspxDocumento: TIPX-1 Pgina 47

Cuiab, 23 de Agosto de 2005, 12:17

T u t o r i a l d e A S P. N E T

WebForm1

Arquivo Listagem03_01.aspx.cs System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

using using using using using using using using using using

namespace Listagem03_01 { public class WebForm1 : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here Response.Write("UserAgent: "); Response.Write(Request.UserAgent+"
"); Response.Write("AcceptTypes: "); for (int i=0;i "); Neste caso, criado um bloco de script que possui uma funo chamada alerta, e com o mtodo RegisterClientScriptBlock(), ele escrito no incio da pgina. O bloco registrado com o nome alerta. Gerando componentes customizados Uma das desvantagens de se utilizar a tcnica anterior a limitao da reusabilidade do cdigo de script. Por exemplo, se voc cria um script para implementao de mscara, e coloca em sua pgina, voc precisa associar cada controle que utiliza o script com cdigo de programao. Se, por deciso de projeto, a mscara deve ser removida, voc precisa lembrar de remover o script e fazer as desassociaes necessrias. Controles do ASP.NET como LinkButton, que utilizam scripts de cliente, no possuem esse problema. Se voc adicionar um controle na pgina, o script que realiza a funcionalidade automaticamente criado. Se voc remover o controle, o script automaticamente removido da pgina. Se voc adicionar mais de um controle do mesmo tipo, seus scripts no sero duplicados. Como fazer isso? Basicamente, todos os controles Web so classes que herdam da classe WebControl. WebControl j implementa algumas propriedades, eventos e mtodos que fazem parte da arquitetura ASP.NET de pginas web. Por exemplo WebControl possui um mtodo protegido chamado Render(). Em tempo de execuo, o framework chama os mtodos Render() de todos os controles. A inteno fazer com que o controle gere o HTML necessrio para ser mostrado na tela. neste momento em que o desenvolvedor pode gerar scripts de cliente. Basta criar uma nova classe, herdando do controle que se deseja modificar, e sobrescrever o mtodo Render() padro do controle base para gerar scripts de cliente. Para gerar scripts de cliente, basta executar os mtodos mostrados na sesso anterior, atravs da referncia Page, que todo WebControl possui. Depois de implementado, seu novo controle ir agir como os outros controles de ASP.NET, gerando scripts de cliente apenas quando necessrio e automaticamente. Se voc no entendeu completamente esta ltima sesso, no se preocupe no o objetivo desta lio ensinar todas as etapas da construo de um controle customizado. Mais informaes podem ser encontradas na sesso Developing ASP.NET Server Controls, disponvel na documentao do Framework .NET.

Escolhendo o mtodo de gerao de scripts de cliente Cada tcnica possui vantagens e desvantagens. Voc vai querer incluir os scripts diretamente na pgina de layout quando:

Voc estiver com pressa Voc estiver passando uma pgina HTML para ASP.NET rapidamente Voc quiser ter mais controle de onde criar seus scripts

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 130

T u t o r i a l d e A S P. N E T

Os scripts no precisam mudar em tempo de execuo no servidor

Voc ir querer incluir scripts via programao quando:

Seus scripts so mutveis, eles podem mudar durante a execuo da aplicao Voc est utilizando Controles Web Voc prefere manter a programao em um loca apenas

Voc ir querer gerar controles customizados:

Sua lgica de script complexa Voc tem muito tempo Voc deseja reaproveitar seu esforo

O programa da listagem 8.1 mostra um pequeno exemplo onde so gerados scripts com diferentes tcnicas. Listagem 8.1: Utilizao de scripts de cliente

Arquivo Listagem08_01.aspx

Listagem08_01 Nome

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 131

T u t o r i a l d e A S P. N E T

Arquivo Listagem08_01.aspx.cs System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

using using using using using using using using using using

namespace Licao08 { public class Listagem08_01 : System.Web.UI.Page { protected System.Web.UI.WebControls.TextBox txtNome; protected System.Web.UI.HtmlControls.HtmlInputButton Button1; protected System.Web.UI.WebControls.Label Label1; private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here Label1.Attributes.Add("onmouseenter", "this.style.color = Label1.Attributes.Add("onmouseleave", "this.style.color = Button1.Attributes.Add("onclick", "alerta();"); RegisterClientScriptBlock("alerta", @" "); } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion

'red'"); 'black'");

}

}

Sumrio

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 132

T u t o r i a l d e A S P. N E T

Nesta lio voc aprendeu como incluir scripts de cliente em Web Forms. Voc pode inserir scripts diretamente na pgina de layout ou atravs de programao. Alternativamente, voc pode componentizar sua lgica em controles customizados.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 133

T u t o r i a l d e A S P. N E T

Lio 9: Controlando dados de requisio e resposta

Esta lio contm informaes sobre o controle de dados de requisio e de resposta do servidor Web. Os objetivos so os seguintes:

Entender como feita a comunicao entre servidor e cliente Entender como ASP.NET modulariza dados de requisio e resposta Se familiarizar com o objeto Request Se familiarizar com o objeto Response

Introduo Quando criamos uma aplicao Web, e nos envolvemos nos minimalismos de fazer uma boa interface com o cliente, e gerar uma boa aplicao no servidor, muitas vezes perdemos a noo de como as coisas realmente acontecem. Basicamente, uma aplicao Web consiste na comunicao entre duas entidades: um cliente - que pode ser um navegador de pginas HTML em um PC ou um aparelho especializado (a porta de uma geladeira, por exemplo) - e um servidor que normalmente um computador ou um conjunto de computadores disponveis a executar determinadas instrues. Essa uma viso simplista, na verdade uma aplicao Web pode ter mais camadas alm dessas, como um servidor de banco de dados, um servidor para autenticar usurios, um servidor para gerenciar a aplicao, um servidor para gerenciar servidores, e outros. Nesta lio, no entanto, estaremos focando os estudos apenas na comunicao entre o servidor da aplicao e o cliente usurio da aplicao. A comunicao entre as duas camadas, a despeito da complexidade da nossa aplicao, bastante simples. Trata-se apenas de mensagens enviadas do servidor para o cliente e vice-versa. O meio de comunicao pode ser qualquer meio de transporte, de fato, desde que a mensagem possa ser compreendida no destino da forma como foi enviada na origem. Normalmente utiliza-se uma rede de computadores com baixo tempo de espera. Para que a mensagem possa ser entendida por ambas as partes, elas utilizam um protocolo: uma linguagem que ambas possam entender, no importando o pas, a arquitetura do computador, o fabricante das partes. Para realizar essa comunicao, os protocolos comumente utilizados so o Hyper Text Transfer Protocol (HTTP) e HTTP Secure (HTTPS). As mensagens em HTTP consistem em duas partes: cabealho e corpo. No cabealho normalmente vo informaes de controle, informaes sobre o contedo do corpo, e informaes extras que no so exatamente relacionados com o corpo. O cabealho normalmente tem um tamanho nfimo em relao ao corpo, sendo de apenas alguns bytes. No corpo est o contedo real da mensagem, o motivo pelo qual a mensagem est sendo enviada. Uma boa ferramenta para visualizao das mensagens HTTP entre cliente e servidor o Fiddler (www.fiddlertool.com). Fiddler um sniffer de HTTP que funciona no cliente. Ele captura as mensagens de sada e de entrada, e permite visualizar tanto o cabealho quanto o corpo da mensagem, de uma forma bastante ituitiva.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 134

T u t o r i a l d e A S P. N E T

As mensagens diferem bastante dependendo do sentido da comunicao. Quando a mensagem sai do cliente em direo ao servidor, normalmente leva informaes sobre o cliente: plataforma de sistema operacional, identificador do navegador, arquivos aceitos pelo cliente, etc. A principal informao, no entanto, um URL: Universal Resource Locator. Ele indica exatamente para onde deve ir a mensagem (arquivo, diretrio, mquina). Em alguns casos, a mensagem pode levar dados fornecidos pelo usurio. A mensagem que sai do cliente chamada de Requisio (Request). Quando a mensagem sai do servidor em direo a um cliente, sempre em resposta a uma requisio. Nenhuma mensagem sair de um servidor para um cliente sem que seja estritamente requisitado pelo cliente. Portanto, a mensagem que sai do servidor recebe o nome de Resposta (Response). A mensagem de resposta no possui URL (uma vez que uma resposta a uma requisio j identificada), mas da mesma forma que a requisio, pode possuir informaes sobre o servidor (plataforma, identificador do servidor HTTP) e informaes sobre o corpo (tamanho da mensagem, tipo da mensagem). O corpo da resposta, normalmente, tende a ser grande. Ele gerado a partir do processamento da requisio pelo servidor. s vezes, a requisio simples e o nico processamento que deve ser feito obter o arquivo requisitado no sistema de arquivos e enviar para o cliente (como o caso de imagens, udio, arquivos em geral, pginas HTML estticas). Na maioria das requisies para aplicaes Web, no entanto, o corpo o resultado do processamento dos dados fornecidos pelo usurio. Esse processamento pode incluir: acessar banco de dados, gerar pginas HTML, gerar um relatrio em PDF e enviar um e-mail para o administrador, entre outros. Em resumo, criar uma aplicao Web , do lado do cliente, fornecer informaes valiosas para o cliente, e dar suporte para que ele nos envie informaes que precisamos; do lado do servidor, receber as informaes do cliente e process-las de forma que satisfaa nossa aplicao, para retornar boas respostas ao cliente.

O modelo ASP.NET Para o servidor Web, as nicas coisas importantes so a mensagem de requisio e a mensagem de resposta. As ferramentas que permitem processar as requisies para gerar respostas existem para que deixem simples para o desenvolvedor programar sua lgica. ASP.NET uma arquitetura que supre esse nicho. O servidor Web configurado para que, quando o URL indicado por uma requisio tiver extenso .aspx, o framework ASP.NET entre em ao. Para o servidor Web, tudo funciona assim: 1. 2. 3. 4. Recebi uma requisio para um arquivo aspx Vou passar a mensagem de requisio para o framework ASP.NET Espero o framework ASP.NET me entregue a mensagem de resposta Depois que a mensagem de resposta estiver pronta, a envio para o cliente

O framework ASP.NET relativamente complexo, se pensarmos em como ele apresenta para ns, desenvolvedores, os dados de requisio. Existem os objetos TextBox com dados digitados pelos usurios, DropDownLists com valores selecionados, e Calendars com meses ativos. No se deixe enganar, no entanto: nenhum desses objetos veio do cliente eles so criados e destrudos no curtssimo espao de tempo entre a requisio do cliente e a resposta do servidor. Os dados que os controles possuem so inseridos pelo framework quando os objetos so criados. Funciona mais ou menos assim:Cuiab, 23 de Agosto de 2005, 12:17 Documento: TIPX-1 Pgina 135

T u t o r i a l d e A S P. N E T

1. Uma classe de servidor pgina X possui um controle de servidor TextBox chamado txt_nome. 2. O servidor Web recebe uma requisio para a pgina X, contendo uma informao: txt_nome=Teste. 3. O servidor Web aciona o framework ASP.NET e passa para ele a requisio. 4. O framework instancia dois objetos: um para tratar a requisio e outro para tratar a resposta (falaremos deles em 5 minutos). 5. O framework popula o objeto de requisio com as informaes recebidas da mensagem de requisio. 6. O framework instancia o objeto pgina X referenciado pela requisio. O objeto TextBox, como um atributo do objeto pgina, instanciado tambm. 7. O framework observa que possui um dado vindo do cliente. O dado txt_nome=Teste. 8. O framework verifica se a pgina possui algum objeto chamado txt_nome. Ele descobe que um TextBox. 9. O framework passa para o TextBox o valor Teste. O TextBox, que dono de si mesmo, inicializa sua propriedade Text com o valor passado pelo framework. 10. Outras coisas acontecem. Entre elas, os eventos de pgina (Load) e de controles (Click, Command, TextChanged, etc.). 11. O framework envia para todos os controles uma mensagem dizendo: hora de acabar, vamos gerar HTML. Ele envia como argumento da mensagem (no caso, o mtodo Render()) o objeto de reposta. 12. O objeto TextBox recebe a mensagem. Ele escreve no objeto de resposta o seguinte: . 13. O framework, depois que todos os controles e a pgina geraram HTML em seu objeto de resposta, destri o objeto pgina. O objeto TextBox, que era um atributo da pgina, destrudo tambm. 14. O framework serializa o objeto de resposta, ou seja, transforma seu contedo em uma string nica. Essa string a mensagem de resposta. 15. O framework envia a mensagem de resposta para o servidor Web. 16. O servidor Web envia a mensagem de resposta para o cliente. Tudo isso acontece em um piscar de olhos. E a cada requisio. O incio um texto com a mensagem de requisio, e o fim uma string com a mensagem de resposta. Embora ns, desenvolvedores ASP.NET, utilizamos basicamente os objetos que criamos na pgina (TextBox, CheckBox e etc.) podemos acessar os dados de requisio e resposta, incluindo corpo e cabealho. ASP.NET facilita nossa vida, mapeandos as mensagens em objetos .NET (ver passo 4). Esses objetos so acessados globalmente em nossa aplicao, atravs dos objetos Request e Response.

O objeto Request O objeto Request um atributo de toda pgina ASP.NET. Ele do tipo System.Web.HttpRequest e mapeia a requisio do cliente. Se voc quiser salvar o contedo da requisio, pode chamar seu mtodo SaveAs(). O melhor ponto para comear a estudar o objeto Request justamente o URL. O objeto Request d acesso ao URL de vrias formas:

Propriedade RawUrl: Uma string que indica a caminho at o recurso requisitado, incluindo seu nome. No inclui o nome do servidor.Documento: TIPX-1 Pgina 136

Cuiab, 23 de Agosto de 2005, 12:17

T u t o r i a l d e A S P. N E T

Propriedade Url: Um objeto do tipo System.Uri que d maiores informaes sobre o URL requisitado. Contm o nome do servidor, o caminho at o recurso (como visto pelo cliente), o caminho do recurso (como visto pelo servidor), a porta de comunicao, a string de consulta do URL, etc. Propriedade QueryString: Uma coleo de itens na forma par chave/valor, contendo as informaes enviadas pelo cliente atravs da string de consulta. A string de consulta o contedo que vm depois do primeiro ponto de interrogao (?) no URL. Propriedade ApplicationPath: Indica o diretrio raiz da aplicao ASP.NET a qual o URL pertence. Propriedade CurrentExecutionPath: Indica qual o recurso que est sendo executado no momento.

O segundo dado mais importante de uma mensagem de requisio o mtodo de envio de dados via HTTP. Eles so trs:

GET: Indica que os dados esto sendo enviados via string de consulta, junto com o endereo do URL. HEAD: Indica que os dados esto sendo enviados dentro do cabealho de dados. POST: Indica que os dados esto sendo enviados no corpo da mensagem de requisio.

possvel ver qual o mtodo de envio da requisio atravs da propriedade HttpMethod. possvel ter acesso aos cabealhos da requisio atravs da propriedade Headers. Essa propriedade uma coleo de dados na forma par chave/valor indicando todos os cabealhos e seus valores da requisio. Alguns cabealhos so comumente acessados e foram promovidos a propriedades de primeira ordem no objeto Request. So eles:

AcceptTypes: tipos de arquivos aceitados pelo cliente ContentEncoding: codificao de caracteres utilizada para o envio da mensagem ContentLenght: tamanho do corpo da mensagem ContentType: tipo dos dados enviados no corpo da mensagem Cookies: uma coleo de cookies enviados pelo cliente UrlReferer: indica a URL que referenciou a URL atual. Na prtica, indica a pgina que referenciou a pgina atual (como uma pgina que possui IFRAME) UserAgent: identificador do navegador do cliente UserLanguages: linguagens suportadas pelo cliente

Quando os dados so enviados via mtodo POST, eles podem ser visualizados na propriedade Form. Form uma coleo de valores na forma par chave/valor. Se os dados foram enviados por um formulrio, por exemplo, cada posio do formulrio ter um valor de formulrio enviado. Se o formulrio enviou arquivos, cada arquivo poder ser obtido na propriedade Files. Files uma coleo de objetos do tipo HttpPostedFile, que contm o contedo do arquivo, seu tipo, seu nome e seu tamanho. Algumas propriedades do objeto Request so fornecidas pelo servidor Web. So elas:

Browser: Um objeto que possui informaes detalhadas sobre o navegador do cliente, como, por exemplo, suporte a script, verso de HTML suportada, suporte a frames, etc. IsAuthenticated: informa se o usurio foi autenticado pelo servidor WebDocumento: TIPX-1 Pgina 137

Cuiab, 23 de Agosto de 2005, 12:17

T u t o r i a l d e A S P. N E T

IsSecure: informa se a conexo segura, ou seja, HTTPS TotalBytes: tamanho total da mensagem UserHostAddress: informa o IP do cliente UserHostName: informa o endereo DNS do cliente, se disponvel

O objeto Response O objeto Response um atributo de toda pgina ASP.NET. Ele do tipo System.Web.HttpResponse e mapeia a requisio do cliente. Ele utilizado principalmente para gerenciamento de cache. Como falaremos de cache em uma prxima lio, vamos focar nos outros usos do objeto Response. Trs propriedades afetam o contedo enviado pelo Response:

ContentEncoding: codificao de caracteres utilizado pelo corpo da mensagem ContentType: tipo do contedo enviado no corpo da mensagem StatusCode, StatusDescription: permite configurar o cdigo de status HTTP enviado para o cliente (e sua descrio). Exemplo: 404 Not Found SupressContent: indica se o processamento vai enviar dados para o cliente

Para transmitir arquivos, utiliza-se um dois seguintes mtodos:

BinaryWrite(): escreve um array de bytes na sada para o cliente TransmitFile(): envia um arquivo do sistema de arquivos para o cliente WriteFile(): escreve arquivos para sada em uma variedade de opes

Os cabealhos de sada no so iteiramente disponveis. possvel limpar todos os cabealhos com ClearHeaders(), e adicionar novos cabealhos com AppendHeader(). possvel controlar a requisio da seguinte forma:

Mtodo End(): Encerra a requisio, envia a mensagem de resposta para o cliente e lana o evento End_Request Mtodo Close(): Fecha a conexo com o cliente Propriedade IsClientConnected: Indica se o cliente ainda est conectado.

O objeto Response possui ainda propriedades e mtodos para trabalhar com cookies, mas dedicaremos uma lio aos cookies na prxima lio.

Sumrio Nesta lio, exploramos os objetos de requisio e resposta, da comunicao entre o cliente e servidor da pgina Web. O objeto de requisio (Request) basicamente trata dos dados enviados pelo cliente. O objeto de resposta (Response) basicamente controla como as informaes sero enviadas para o cliente.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 138

T u t o r i a l d e A S P. N E T

Lio 10: Utilizao de cookies

As lies anteriores sobre controle de dados de requisio e resposta e manuteno de dados de seo tocou no assunto de cookies. Esta lio ir abordar os cookies. Os objetivos so os seguintes:

Mostrar o que so cookies Como os cookies podem ser utilizados Como tratar cookies com ASP.NET

Introduo Um cookie uma informao que pode ser enviada para o navegador do cliente. No cliente, ele pode ficar em memria ou ser persistido no sistema de arquivos. O cliente sempre manda os cookies que enviamos para ele quando requisita um recurso do servidor. Um cookie possui as seguintes caractersticas:

uma informao que possui um nome e um valor Normalmente pequeno, a maioria dos navegadores suportam apenas cookies de 4096 bytes de tamanho Um cookie tem a assinatura do domnio (servidor) que enviou o cookie Um cookie enviado apenas para o domnio que o criou Um cookie tem uma validade, depois de expirada a validade, o cliente o exclui.

Por causa dessas caractersticas, cookies so normalmente utilizados para armazenar o ID de sesso do usurio no banco, e assim, servir de chave para obter mais informaes que normalmente so gravadas no objeto de sesso do usurio. De fato, o comportamento padro de ASP.NET permitir sesses indexadas por um ID, que enviado para o cliente como um cookie. Se voc possui o Fiddler instalado em sua mquina observe as requisies para uma pgina ASP.NET com sesso. Voc vai observar a transferncia de um cookie chamado ASP.NET_SessionId. Esse cookie gerado automaticamente quando uma nova sesso de usurio criada.

Cookies em ASP.NET Em alguns casos, voc ir querer criar seus prprios cookies. ASP.NET mapeia um cookie como o objeto System.Web.HttpCookie. A classe HttpCookie possui as seguintes propriedades:

Domain: o domnio associado ao cookie Expires: a data de expirao do cookie Name: nome do cookie Value: valor associado ao cookie Secure: indica se o cookie deveria ser ser enviado apenas sobre conexes seguras HTTPS

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 139

T u t o r i a l d e A S P. N E T

Essas so as principais propriedades, as quais voc pode estar manipulando. Mas e como criar e ler cookies? Para fazer isso voc acessa mtodos dos objetos Response e Request. Criar cookies Para criar cookies, voc precisa escrever novos cookies no objeto de resposta (Response). Response possui uma propriedade chamada Cookies, que uma coleo de cookies a serem gravados no cliente. Um mtodo para gravar um cookie poderia ser o seguinte: private void Button1_Click(object sender, System.EventArgs e) { Response.Cookies[txtNome.Text].Value = txtValor.Text; } Simples e fcil. Como indexador, voc utiliza o nome do cookie, e configura o valor do cookie. Voc pode utilizar o mtodo Add() para escrever novos cookies tambm. Para definir datas de expirao, voc pode utilizar a propriedade Expires do objeto cookie adicionado coleo, dessa forma: private void Button1_Click(object sender, System.EventArgs e) { Response.Cookies[txtNome.Text].Value = txtValor.Text; Response.Cookies[txtNome.Text].Expires = DateTime.Now.AddHours(1.0); } No exemplo acima, o cookie est sendo configurado para ser expirado dentro de 1 hora depois de criado. Ler um cookie Os cookies que so enviados pelo cliente podem ser lidos a partir de uma coleo chamada Cookies, que propriedade do objeto Request. Cookies uma coleo onde cada item um objeto HttpCookie. Cookies possui dois indexadores para cookies, um por posio e outro por nome de cookie. Se voc quiser preencher uma lista com todas os cookies enviados pelo cliente, voc pode criar um mtodo como este: ListBox1.Items.Clear(); HttpCookieCollection cookies = Request.Cookies; for (int i=0; i Senha Senha

Arquivo Listagem11_01.aspx.cs System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls; System.Security.Cryptography; System.Text;

using using using using using using using using using using using using

namespace Licao11 { public class Listagem11_01 : System.Web.UI.Page {

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 146

T u t o r i a l d e A S P. N E T

protected protected protected protected protected

System.Web.UI.WebControls.TextBox TextBox1; System.Web.UI.WebControls.Button Button1; System.Web.UI.WebControls.Label Label1; System.Web.UI.WebControls.Label Label2; System.Web.UI.WebControls.TextBox TextBox2;

private void Page_Load(object sender, System.EventArgs e) { } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Button1.Click += System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Button1_Click(object sender, System.EventArgs e) { UTF8Encoding encoder = new UTF8Encoding(); string origem = TextBox1.Text; byte[] destino = MD5Hash( encoder.GetBytes(origem) ); } TextBox2.Text = encoder.GetString(destino);

new

private byte[] MD5Hash(byte[] dados) { MD5CryptoServiceProvider md5 MD5CryptoServiceProvider(); byte[] resultado = md5.ComputeHash(dados); return resultado; } } }

=

new

Conexo com o usurio Mesmo se criptografarmos a senha, ainda assim um invasor poderia roubar a senha durante sua transmisso na internet. Isso acontece porque o protocolo HTTP no oferece nenhuma proteo para os dados. Uma das alternativas para proteger a conexo entre cliente e servidor utilizar um mtodo de criptografia de conexo. Esses mtodos fazem o seguinte: 1. Quando a mensagem for enviada, ela criptografada com um algoritmo reversvel 2. A mensagem transferida via internet 3. Quando a mensagem chega no destino, a mensagem descriptografada.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 147

T u t o r i a l d e A S P. N E T

A criptografia protegida por uma chave. Somente de posse desta chave que o destino pode descriptografar a mensagem. Sem a chave, os dados no passam de bits aleatrios. Portanto, um invasor, mesmo que obtenha todos os dados da conexo, no conseguir interpretar os dados, se no tiver a chave. A chave combinada no momento da conexo entre cliente e servidor, e normalmente muito grande (mais de 128 bits). Assim, fica virtualmente impossvel um invasor descriptografar a conexo por fora bruta (tentando todas as chaves possveis com 128 bits). O protocolo de criptografia mais utilizado o SSL (Secure Sockets Layer). possvel habilitar SSL para transmisso de dados da aplicao web atravs do gerenciador do IIS. Para isso, necessrio adquirir um certificado de identidade com alguma empresa de certificao.

Validao de dados A validao de dados do usurio tambm importante, e muitas vezes no tratada corretamente. Dados no validados so um problema em potencial para sua aplicao. Usurios mal intencionados podem inserir dados que podem gerar uma exceo no tratada. Por exemplo, entrar com uma string quando era esperado um nmero inteiro. Tratar as informaes na interface tampouco adianta. Como voc sabe, os dados so enviados atravs de mensagens para o servidor. Nada impede um hacker de gerar uma mensagem que contenha dados invlidos, tornando intil todo o trabalho que voc teve para validar os dados no navegador. Portanto, as validaes de dados precisam ser feitas no servidor. Podem (e devem, sempre que teis) ser feitas no cliente tambm, mas sero feitas pelo menos do servidor. Voc deve tratar toda entrada do usurio como maliciosa, a no ser que se prove o contrrio. E sempre deve-se aceitar apenas a entrada correta, e rejeitar tudo o mais. Em muitos casos, acreditamos ser mais simples rejeitar o que no queremos e aceitar todo o resto. Isto errado, e cria brechas de segurana. Quando voc rejeita a entrada incorreta, voc est declarando que sabe quais so todos os casos que podem gerar erro, e isso quase nunca acontece. Portanto, bem possvel que o usurio encontre meios de burlar a validao e inserir dados invlidos. Quando voc aceita apenas a entrada esperada, e rejeita todo o resto, voc est dizendo que s ir aceitar aquilo que voc sabe que no vai estragar seu sistema. Incrivelmente, esta uma tarefa bastante difcil. Em alguns casos, ser difcil encontrar o domnio de determinado dado. Especialmente quando voc espera receber grandes quantidades de texto que aparentemente podem conter qualquer coisa. A maneira mais usual de tratar erros de entrada utilizar expresses regulares. ASP.NET possui controles de validao (de servidor e cliente), em especial o RegularExpressionValidator, que permite a utilizao de expresses regulares para validar entrada. Se voc quiser fazer um sistema de validao customizado, pode utilizar a classe Regex, do namespace System.Text.RegularExpressions para testar entradas de usurio com uma expresso regular. Voc verifica combinao de uma entrada de usurio com uma expresso com o mtodo IsMatch(). Um mtodo para validar pode ser parecido com isso: private void Button1_Click(object sender, System.EventArgs e) {

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 148

T u t o r i a l d e A S P. N E T

}

Regex reg = new Regex(TextBox2.Text); if (reg.IsMatch(TextBox1.Text)) Label1.Text = "A expresso regular combina"; else Label1.Text = "A expresso regular no combina";

A sintaxe de expresses regulares em ASP.NET no muito diferente do padro de expresses regulares. No entanto, talvez voc precise entender o comportamento do engine de expresses regulares. Procure a documentao do .NET Framework por Regular Expression Language Elements. Um programa que testa entrada de usurio pode ser visto na listagem 11.2: Listagem 11.2: Expresses regulares

Arquivo Listagem11_02.aspx

Listagem11_02 ^*$ Texto: ExpReg:

Arquivo Listagem11_02.aspx.cs System; System.Collections; System.ComponentModel; System.Data; System.Drawing; System.Web; System.Web.SessionState; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.HtmlControls;

using using using using using using using using using using

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 149

T u t o r i a l d e A S P. N E T

using System.Text.RegularExpressions; namespace Licao11 { public class Listagem11_02 : System.Web.UI.Page { protected System.Web.UI.WebControls.TextBox TextBox1; protected System.Web.UI.WebControls.TextBox TextBox2; protected System.Web.UI.WebControls.Label Label1; protected System.Web.UI.WebControls.Label Label2; protected System.Web.UI.WebControls.Label Label3; protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e) { Label1.Text = ""; } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Button1.Click += System.EventHandler(this.Button1_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void Button1_Click(object sender, System.EventArgs e) { Regex reg = new Regex(TextBox2.Text); if (reg.IsMatch(TextBox1.Text)) Label1.Text = "A expresso regular combina"; else Label1.Text = "A expresso regular no combina"; } }

new

}

Logging Alm disso, os sistemas de segurana (proteo de senha, criptografia, controle de acesso, etc.) no so 100% confiveis. Portanto, necessrio utilizar de mtodos como auditorias e logging. Auditoria o processo de monitorar certas atividades e fazer o logging dos resultados de monitorao em um log de eventos. Logging o processo de escrever informaes sobre as atividades em um local conhecido para posterior visualizao. Para aplicaes ASP.NET, o logging realizado pelo IIS. O logging realizado a nvel de site. O logging pode ser ativado pelo dilogo de propriedades do site, no administrador do IIS.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 150

T u t o r i a l d e A S P. N E T

Controle de acesso A maior parte de gerenciamento de segurana para os desenvolvedores recai em controle de acesso. Controle de acesso o processo de definir quem pode acessar os recursos da aplicao. Isto inclui autenticao e autorizao.

Autenticao o processo de validar se usurio realmente diz quem ser. Autorizao o processo de determinar se o usurio tem permisso para executar a ao requisitada.

H vrios mtodos de autenticao e autorizao em ASP.NET. preciso lembrar que os melhores sistemas de controle de acesso a aplicao so inteis se o malfeitor tem acesso fsico ao servidor ou pode danific-lo de alguma forma. A autenticao e autorizao em ASP.NET se d em dois nveis: o nvel de sistema operacional/IIS e o nvel de ASP.NET. A autenticao/autorizao feita nesta seqencia: 1. Uma requisio por um recurso ASP.NET (um Web Form, por exemplo) chega ao IIS 2. Se algum dos mtodos de autenticao do IIS est habilitado, o IIS realiza a autenticao e adiciona a informao de autenticao mensagem de requisio 3. O IIS passa a mensagem de requisio ao framework ASP.NET. O IIS no participa mais da requisio a partir deste ponto 4. Se a autenticao via Windows est habilitada, a autorizao realizada de acordo com as informaes de autenticao feita pelo IIS. Se a autorizao procede, a requisio processada 5. Se a autenticao via Forms est habilitada, o ASP.NET verifica o cookie de autenticao Forms. Se o cookie no existe, o usurio redirecionado pgina de login da aplicao. Uma vez que o usurio realiza o logon, e a autorizao procede, a requisio processada. 6. Se a autenticao via Passport est habilitada, o ASP.NET verifica o cookie de autenticao Passport. Se o cookie no existe, o usurio redirecionado pgina de login do Passport. Uma vez que o usurio entra com seu Passport, e a autorizao procede, a requisio processada. Autenticao Existem, portanto, trs mtodos de autenticao em ASP.NET: via Windows, via Forms e via Passport. O mtodo escolhido depende de vrios fatores, como o tipo de clientes da aplicao, o controle sobre o navegador dos clientes, a quantidade de pblico esperada, etc. Obviamente, possvel no utilizar autenticao alguma para web sites simples. O tipo de autenticao feita no arquivo Web.config, no elemento authentication. Autenticao baseada em Windows

Neste caso, o ASP.NET deixa que o IIS autentique o usurio. H trs sub tipos desta autenticao:

Autenticao bsica: compatvel com a maioria dos navegadores, mas a senha enviada em texto plano via internet Autenticao digest: introduzida com HTTP 1.1, e pode no ser suportada por todos os navegadores. preciso um controlador de domnio Windows 2000 na rede. A senha enviada como hash, e o IIS confere com a senha cadastrada no controlador de domnio.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 151

T u t o r i a l d e A S P. N E T

Autenticao integrada com Windows (NTLM): Disponvel apenas com Internet Explorer. o mais seguro porque nunca envia login e senha via rede. O protocolo usado no HTTP, portanto pode ser complexo implement-lo para clientes provenientes da Internet. Tambm requer que o usurio tenha uma conta Windows cadastrada ou no servidor Web ou no controlador de domnio.

Para utilizar esta autenticao, voc deve configurar o elemento authorization com o atributo mode para Windows. Depois, voc configura a aplicao, no administrador IIS, na aba Segurana de diretrio. Mais de um mtodo pode ser selecionado para autenticao. Neste caso, a autenticao integrada ao Windows e a autenticao digest sempre ter precedncia sobre autenticao bsica. E voc deve desligar a autenticao annima. Autenticao baseada em Passport

Passport um servio de autenticao centralizado da Microsoft. Com a autenticao via Passport, possvel autenticar o usurio com seu Passport. Para fazer isso, preciso instalar o Passport SDK, provido pela Microsoft. O servio de autenticao Passport pago. Autenticao baseada em Forms

A autenticao baseada em Forms permite aos desenvolvedores criar sua prpria metodologia de autenticao. Tudo o que necessrio fazer criar uma pgina de login de configurar a aplicao onde encontr-la (no arquivo Web.config). Na pgina de login feita a verificao de login e senha fornecido (verificando banco de dados, arquivo XML, domnio Windows, etc.). Uma vez que a autenticao feita, possvel utilizar os mtodos da classe FormsAuthentication para remover ou atualizar o cookie de autenticao e redirecionar o usurio pgina que ele requisitou. Se um usurio tentar acessar um recurso sem estar autenticado, ou seja, sem ter o cookie de autenticao, ele automaticamente redirecionado para a pgina de login. Com autenticao baseada em Forms, a senha e usurio enviada em texto plano. Para proteger os dados transmitidos, preciso utilizar SSL. A configurao no arquivo Web.config mais ou menos essa: A propriedades indicadas no elemento forms so as seguintes:

name: Este o nome do cookie que ser gravado no cliente. Esse cookie guarda o ticket de autenticao do usurio loginUrl: Esta o URL ao qual todos os usurios no autenticados sero redirecionados. Na maioria dos casos, essa uma pgina de login, onde o cliente vai dar as suas credenciais para autenticao.

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 152

T u t o r i a l d e A S P. N E T

protection: Mtodo utilizado para proteo dos dados do cookie de autenticao. Os valores possveis so: All: Faz validao e encriptao dos dados. O algoritmo DES triplo utilizado para fazer a encriptao. o mtodo padro para Forms, e o mais indicado. None: Usados para sites com requisitos fracos em autenticao. o mais eficiente em performance, mas deve ser utilizado com precauo. Encryption: realizada a encriptao dos dados do cookie com DES ou DES triplo, mas no faz validao dos dados. Validation: No utiliza encriptao no cookie, mas certifica-se de que os dados no foram alterados no trnsito. timeout: A quantidade de tempo, em minutos inteiros, em que o cookie vai expirar. O valor padro 30 minutos. O tempo atualizvel, ou seja, o cookie vai expirar depois de n minutos depois que o ltimo recurso foi requisitado. path: o caminho utilizado no cookie. O padro /, para evitar problemas com duplicao de cookies.

importante o elemento deny, filho do elemento authorization, configurado com ? Isso vai negar todas as requisies feitas por usurios annimos, redirecionando-os para a loginPage. Importante: normalmente as pginas que necessitam de autorizao ficam em uma pasta separada dentro da aplicao. Isso porque normalmente se faz a pgina de login com acesso annimo, e a parte segura com as configuraes de segurana vistas acima. Essas configuraes so feitas no arquivo Web.config, e apenas uma configurao pode estar presente por arquivo. Pode existir um arquivo Web.config por pasta na aplicao. A pasta herda as configuraes da pasta pai, e utiliza as configuraes do arquivo Web.config presentes na prpria pasta, se existir. Portanto, para fazer um site com autenticao Forms, siga estes passos: 1. Crie uma pgina para autenticar seus usurios. Ela deve fazer qualquer processamento para ter certeza de que o usurio realmente quem diz que . Normalmente, a pgina pede nome de usurio e senha, verifica se esses valores esto presentes em um banco de dados. 2. Configure o mtodo de autenticao para, quando o usurio for autenticado, chamar o mtodo RedirectFromLoginPage(), da classe FormsAuthentication (System.Web.Security.FormsAuthentication). Ele far com que o usurio seja automaticamente redirecionado para a pgina que ele requisitou quando foi enviado automaticamente para a pgina de login. O mtodo de autenticao pode ser ago assim: private void Entrar_Click(object sender, System.EventArgs e) { if (txtUsuario.Text == txtSenha.Text) { FormsAuthentication.RedirectFromLoginPage(txtUsuario.Text, false); } }

Cuiab, 23 de Agosto de 2005, 12:17

Documento: TIPX-1

Pgina 153

T u t o r i a l d e A S P. N E T

Em alguns casos, voc vai querer manter uma parte do site disponvel para todos os usurios, e outra parte disponvel apenas para usurios autenticados. Ns fizemos isso em nosso exemplo. As pginas so Listagem11_03.aspx e Listagem11_04.aspx. Deixamos a raiz da aplicao disponvel para todos os usurios (para que pudessem acessar as pginas Listagem11_01.aspx e Listagem11_02.aspx). Por isso, fizemos configuraes especiais no arquivo web.config da raiz: Isso configura a aplicao para trabalhar com o modelo de autentica