January 9, 2012

ASP.NET MVC 3 – Fundamentos / Routing Incoming Requests

ASP.NET MVC Controles – Routing Incoming Requests

Definição da sintaxe das URLs
Em um mundo no qual URLs solicitado não necessariamente coincidem com os arquivos físicos no servidor web, o primeiro passo a tomar é de listagem que URLs sejam significativos para a aplicação. Para evitar ser específico demais, vamos supor que você suportar apenas algumas URLs fixas, cada mapeado para um componente manipulador de HTTP. O trecho de código a seguir mostra as mudanças necessárias a serem feitas ao padrão web.config




Sempre que o aplicativo recebe um pedido que corresponda ao URL especificado, ele irá passá-la para o manipulador especificado.

Definir o comportamento do manipulador HTTP

No ASP.NET, um manipulador de HTTP é um componente que implementa a interface IHttpHandler. A interface é simples e consiste de dois membros, como mostrado aqui:

public class MvcEmuleHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
// Logic goes here
...
}
public Boolean IsReusable
{
get { return false; }
}
}

Na maioria das vezes, um manipulador de HTTP tem um comportamento codificado influenciado apenas por alguns dados de entrada passou a string de consulta. Nada nos impede, no entanto, de usar o manipulador como uma fábrica abstrata para adicionar mais um nível de indireção. O manipulador, de fato, pode utilizar as informações do pedido para determinar um componente externo para chamar de realmente servir o pedido. Desta forma, um manipulador HTTP pode servir uma variedade de pedidos e envio apenas a chamada entre alguns componentes mais especializados.

O manipulador HTTP pôde analisar o URL em tokens e usar essa informação para identificar a classe eo método para invocar. Aqui está um exemplo de como poderia funcionar:

public void ProcessRequest(HttpContext context)
{
// Parse out the URL and extract controller, action, and parameter
var segments = context.Request.Url.Segments;
var controller = segments[1].TrimEnd('/');
var action = segments[2].TrimEnd('/');
var param1 = segments[3].TrimEnd('/');
// Complete controller class name with suffix and (default) namespace
var fullName = String.Format("{0}.{1}Controller",
this.GetType().Namespace, controller);
var controllerType = Type.GetType(fullName, true, true);
// Get an instance of the controller
var instance = Activator.CreateInstance(controllerType);
// Invoke the action method on the controller instance
var methodInfo = controllerType.GetMethod(action,
BindingFlags.Instance |
BindingFlags.IgnoreCase |
BindingFlags.Public);
var result = String.Empty;
if (methodInfo.GetParameters().Length == 0)
{
result = methodInfo.Invoke(instance, null) as String;
}
else
{
result = methodInfo.Invoke(instance, new Object[] { param1 }) as String;
}
// Write out results
context.Response.Write(result);
}

O código anterior só assume o primeiro token na URL após o nome do servidor contém as principais informações para identificar o componente especializado que irá servir o pedido. O segundo símbolo refere-se ao nome do método a ser chamado neste componente. Finalmente, o símbolo indica um terceiro parâmetro para passar.

Chamando o manipulador HTTP

Dada uma URL como home/teste/*, verifica-se que a casa identifica a classe, testar o método identifica, e qualquer que seja trilhas é o parâmetro. O nome da classe é ainda mais trabalhado e ampliado para incluir um namespace e um sufixo. De acordo com o exemplo, o nome da classe final é MvcEmule.Components.HomeController. Esta classe é esperado para estar disponível para a aplicação. A classe também é esperado para expor um método chamado de teste, como mostrado aqui:

namespace MvcEmule.Components
{
public class HomeController
{
public String Test(Object param1)
{
var message = "

Got it! You passed '{0}'

"; return String.Format(message, param1); } } }

Este exemplo simples demonstra a mecânica básica usada pelo ASP.NET MVC .. O componente especializado que atende a uma solicitação é o controlador. O controlador é uma classe com métodos e não apenas do Estado. Um único nível de sistema manipulador de HTTP cuida de despachar os pedidos de entrada para uma classe de controlador específico para que a instância da classe executa um método determinada ação e produz uma resposta.

E sobre o esquema de URLs? Neste exemplo, basta usar uma URL codificada. No ASP.NET MVC, você tem uma sintaxe muito flexível você pode usar para expressar as URLs da aplicação reconhece. Além disso, um componente novo sistema nas intercepções em tempo de execução pedidos pipeline, processa a URL, e aciona o ASP.NET MVC manipulador HTTP. Este componente é o módulo de roteamento de URL HTTP.

May 3, 2011

Trabalhando com Session e Request ( POST / GET ) no C#Working with Session and Request ( POST / GET ) in C#Lavorare con Session e Request (POST / GET) in C #Работа с Session и Request (POST / GET) в C #

Request

Obtendo IP do Visitante/Usuário

Request.UserHostAddress.ToString();

Obtendo o valor de um item enviado via GET

Request.QueryString["ItemGET"];

Obtendo o valor de um item enviado via POST

Request.Form["ItemPOST"];

Dica:

Use .ToString(); no final do Request para poder usar o valor para uma String. Exemplo String strValorPost = Request.Form["ItemPOST"].ToString();

Session

Criando uma Session:

 Session["nomeSession"] = "valorSession"; 

Lendo uma Session:

 String strValorSession = Session["nomeSession"]; 

Exibindo o Timeout da Session:

 Response.Write(Session.Timeout.ToString()); 

Definindo o Timeout:

 Session.Timeout = 5; 

Removendo:

 Session.Remove("nomeSession");

Request

Getting IP of User

Request.UserHostAddress.ToString();

Getting the value of an item sent via GET

Request.QueryString["ItemGET"];

Getting the value of an item sent via POST

Request.Form["ItemPOST"];

Tip:

Use .ToString(); the end of the Request in order to use the value to a String. Sample String strValorPost = Request.Form["ItemPOST"].ToString();

Session

Creating a Session

Session["nameSession"] = "amountSession";

Reading a Session

 String strValorSession = Session["nameSession"]; 

View Timeout of Session:

 Response.Write(Session.Timeout.ToString()); 

Setting the TimeOut:

 Session.Timeout = 5; 

Removing:

 Session.Remove("nomeSession");

Request

Ottenere IP del visitatore

Request.UserHostAddress.ToString();

Ottenere il valore di un element inviato tramite GET

Request.QueryString["ItemGET"];

Ottenere il valore di un element inviato tramite POST

Request.Form["ItemPOST"];

Suggerimento:

Usa .ToString(); il fine della richiesta al fine di utilizzare il valore in una stringa. Esempio String strValorPost = Request.Form["ItemPOST"].ToString();

Session

Creazione di una Session:

 Session["nomeSession"] = "valorSession"; 

Lettura di una Session:

 String strValorSession = Session["nomeSession"]; 

Lettura di Timeout di Session:

 Response.Write(Session.Timeout.ToString()); 

Impostazione del Timeout:

 Session.Timeout = 5; 

Rimozione:

 Session.Remove("nomeSession");

Request

Получение IP посетителя

Request.UserHostAddress.ToString();

Получение значения пункта отправлено через GET

Request.QueryString["ItemGET"];

Получение значения пункта отправлено по почте

Request.Form["ItemPOST"];

Совет:

Использование .ToString(); конце запроса, чтобы использовать значение в строку. Пример String strValorPost = Request.Form["ItemPOST"].ToString();

Session

Создание сессии:

 Session["nomeSession"] = "valorSession"; 

Чтение сессии:

 String strValorSession = Session["nomeSession"]; 

Просмотр сессии вышло:

 Response.Write(Session.Timeout.ToString()); 

Настройка вышло:

 Session.Timeout = 5; 

Удаление:

 Session.Remove("nomeSession");

May 2, 2011

Trabalhando com Cookies no C#

Metodo Fácil:

Criando

private void CriarCookie(string texto)
{
HttpCookie cookie = new HttpCookie(“SITE”);

cookie.Values.Add(“IP”, this.Page.Request.UserHostAddress.ToString());
cookie.Values.Add(“USERNAME”, texto);

cookie.Expires = DateTime.Now.AddDays(365);
this.Page.Response.AppendCookie(cookie);
}

Lendo

private HttpCookie ReadCookie()
{
try
{
return this.Page.Request.Cookies["SITE"];
}
catch
{
return null;
}
}

 

A classe HttpCookie possui algumas propriedades avançadas:

Propriedade Descrição
Domain Configura o dominío ao qual pertence este cookie. Se utilizado, ele restringe o acesso ao cookie a servidores do domínio espeficicado, como mycompany.com.
Path 

Configura o caminho ao qual o pertence este cookie. Se utilizado, restringe o acesso ao cookie a páginas localizadas no caminho especificado.
Secure 

Configura a flag que determina se o cookie deve ser transmitido de forma segura para o browser do usuário, utilizando o protocolo HTTPS. Seu servidor web deve ter HTTPS configurado para que esta opção funcione.
HasKeys Informe se o cookie é composto de uma coleção de strings

Advanced Properties of the HttpCookie Class

April 18, 2011

Como configurar a reciclagem periódica de um pool de aplicativos no iis7

A Reciclagem de um pool instrui o IIS a retirar qualquer processo de trabalho atual automaticamente após ele ter executado as solicitações existentes. O benefício é que os usuários não verão uma interrupção nos serviços em seu computador, mas o processo de trabalho será substituído por um novo o mais rápido possível. Geralmente a reciclagem de pools de aplicativos é executada quando problemas como vazamentos na memória ou consumo de recursos tendem a aumentar significativamente com o tempo. Quase sempre, a causa dessa disfunção é um defeito ou outro problema no código do aplicativo. A solução ideal é corrigir o problema no aplicativo subjacente. No entanto, é possível resolver pelo menos os sintomas usando a Reciclagem.

Em alguns casos é possível reciclar automaticamente processos de trabalho com base no uso de recursos ou em momentos específicos. Você pode acessar essas opções conforme o tutorial abaixo.

1. Abra o IIS 7/7.5

2. No Painel selecione “Application Pools” (ou Pools de Aplicativos em pt-br)

3. Em Application Pools selecione o Pools desejado e clique com o botão direito e clique em Recycling (ou Reciclagem em pt-br)

4. Na janela Recycling Conditions (ou “Condições de Reciclagem”) do Edit Application Pool Reciclagem Settings Wizard ( ou Assistente de Configurações da Reciclagem do Pool de Aplicativos), seleciona-se pelo menos uma das opções na seção intervalos fixos, digite os valores nas caixas de texto apropriado, e então clique em Avançar, conforme imagem abaixo:

As principais opções de configurações de reciclagem são Fixed Intervals (que é baseada em momentos específicos ou após uma quantidade fixa de solicitações serem processadas) ou Memory Based Maximums. As opções mais apropriadas dependerão dos problemas específicos que você estiver tentando solucionar ou evitar. Em geral a reciclagem de pools de aplicativos pode reduzir o desempenho muito rapidamente. No entando, quando um aplicativo Web tem problemas sérios, é preferível resolvê-los através da reciclagem de processos de trabalho antes que os usuários percebam demoras ou erros no site.

5.  (Opcional) No Log de eventos de reciclagem você seleciona quais os eventos devem ser registrados no log, e, em seguida, clique em Concluir.

O registro de eventos de reciclagem de pool de aplicativos também é uma parte importante do processo para assegurar que o servidor Web e seus aplicativos sejam executados como esperado. Por exemplo, se você configurar os limites máximos de memória provavalmente vai querer saber a freuência com que o pool de aplicativos foi reciclado.

Também é possível fazer a configuração da reciclagem através do arquivo ApplicationHost.config usando o elemento <recycling>, estarei abordando em um futuro artigo.

 

April 2, 2011

Função para Validar Email em C#

public static bool ValidarEmail(string email)

{

bool validEmail = false;

int indexArr = email.IndexOf(‘@’);

if (indexArr > -1)

{

int indexDot = email.IndexOf(‘.’, indexArr);

if (indexDot > -1 && email.Length – 1 > indexDot)

{

validEmail = true;

}

}

return validEmail;

}

February 27, 2011

Criptografando a QueryString de uma URL com ASP.NET C#

No desenvolvimento Web é muito comum utilizarmos querystrings para passar informações de uma página para outra.

Porém, em algumas situações o uso de querystrings pode tornar a aplicação vulnerável, permitindo que o usuário possa ter acesso a alguma informação a qual não deveria. Isso acontece em função da curiosidade do usuário, que na base da tentativa, pode alterar o valor da querystring.

Mostrarei uma maneira de inibir esse tipo de ação, utilizando uma rotina de criptografia simples, mas bastante útil, que permitirá criptografar e descriptografar a informação que será passada via querystring.

Veja a classe que chamei de “Criptografia”, contendo os métodos “Criptografar” e “Descriptografar”:

using System;
using
System.Text;
using System.IO;
using System.Security.Cryptography;

public class Criptografia 
{
    
private static byte
[] chave = { };
   
private static byte
[] iv = { 12, 34, 56, 78, 90, 102, 114, 126 };

    public Criptografia()
    {    

    }

    public static string Criptografar(string valor, string chaveCriptografia)
    {
        DESCryptoServiceProvider des; 
        MemoryStream ms; 
        CryptoStream cs; byte[] input;

        try
        {
            des = new DESCryptoServiceProvider();
            ms = new MemoryStream();

            input = Encoding.UTF8.GetBytes(valor);chave = Encoding.UTF8.GetBytes(chaveCriptografia.Substring(0, 8));

            cs = new CryptoStream(ms, des.CreateEncryptor(chave, iv), CryptoStreamMode.Write);
            cs.Write(input, 0, input.Length);
            cs.FlushFinalBlock();

            return Convert.ToBase64String(ms.ToArray());
       
}
        catch (Exception ex)
       
{
            throw ex; 
        }
    }

    public static string Descriptografar(string valor, string chaveCriptografia)
   
{
        DESCryptoServiceProvider des;
        MemoryStream ms; 
       
CryptoStream cs; byte[] input;

        try
       

            des = new DESCryptoServiceProvider();
           
ms = new MemoryStream();

            input = new byte[valor.Length];
            input = Convert.FromBase64String(valor.Replace(” “, “+”));

            chave = Encoding.UTF8.GetBytes(chaveCriptografia.Substring(0, 8));

            cs = new CryptoStream(ms, des.CreateDecryptor(chave, iv), CryptoStreamMode.Write);
           
cs.Write(input, 0, input.Length);
           
cs.FlushFinalBlock();

            return Encoding.UTF8.GetString(ms.ToArray());
       
}
       
catch (Exception ex)
       
{
            throw ex;
        }
    }
}

Para testar o funcionamento da rotinha criei dois webforms: “Pagina1.aspx” e “Pagina2.aspx”.

Na “Pagina1.aspx” adicionei um Button e implementei o seguinte código para o evento Click. Onde é montada a URL com o valor da querystring criptografado pelo método “Criptografar” da Classe “Criptografia”. Escolhi o valor 12 como ID de exemplo: 

protected void Button1_Click(object sender, EventArgs e)
{
    string url = “Pagina2.aspx?id=” + Criptografia.Criptografar(“12″, “#!$a36?@”);

    Response.Redirect(url);
}
Já na “Pagina2.aspx”, adicionei um Label e implementei o seguinte código para o evento Load da página. E exibirá o valor da querystring, já descriptografado no Label:

protected void Page_Load(object sender, EventArgs e)
{
    string querystring = Request.QueryString["id"];

    Label1.Text = Criptografia.Descriptografar(querystring, “#!$a36?@”);
}

January 24, 2011

Alterando o endereço IP do servidor usando asp.net

Alterando o endereço IP do computador que automaticamente é muito fácil. Microsoft Trickily Microsoft armazena as informações de IP no registro Consulte abaixo o código que muda o endereço IP do servidor host. Isso pode ser usado em janelas de aplicativos ou serviços do Windows para alterar o endereço IP do computador local e também pode ser usada em asp.net para alterar o endereço IP do servidor que hospeda sua aplicação asp.net. Certifique-se que namespace Microsoft.Win32 é visível para o código abaixo onde ele é colocado porque Win32 é necessária para manipular o registro do Windows. Reinicialização do servidor é necessária para os novos endereços IP para entrar em efeito.

 

RegistryKey key = Registry.LocalMachine.OpenSubKey(“SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces”, true);
// Registry key where IP information is stored.

foreach (string s in key.GetSubKeyNames())
{
RegistryKey rk = Registry.LocalMachine.OpenSubKey(“SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\” + s, true);
if (rk.ValueCount >= 12) // In general, active network card will have more than 12 setting values
{

try
{

string[] s1 = { “12.24.36.48″, “13.26.39.64″ }; // Array of IP addresses to set.
rk.SetValue(“IPAddress”, s1);

}
catch (Exception exc)
{
// Error message logic here.
}

}
rk.Close();
}

Obs: Tente Não usar use este código antieticamente.

“O Código requer um nível de confiança total habilitado para o site ASP.NET para executar código acima, caso contrário não vai funcionar.”

December 22, 2010

Text Template Transformation Toolkit e ASP.NET MVC

Microsoft Visual Studio inclui um mecanismo de geração de código conhecido como T4 (que é a abreviação de texto modelo transformação Toolkit). Você provavelmente já usou T4 modelos no Visual Studio sem mesmo saber que estavam trabalhando nos bastidores. Este artigo vou para lhe fornecer uma introdução básica ao T4 modelos e mostrar como o ASP.NET MVC usa essa tecnologia. Também mostrarei como personalizar modelos T4 para aprimorar seu trabalho diário com a estrutura MVC.

A idéia básica por trás do modelo de Kit de ferramentas é analisar um arquivo de entrada e transformá-lo em um arquivo de saída. O arquivo de entrada é um modelo — um arquivo de texto com uma extensão de arquivo .tt. O arquivo de saída também conterá o texto e o texto pode ser translation from VPE for Csharp código, Visual Basic código, Web Forms código, marcação ou qualquer outra coisa que você precisa gerar.

A maneira mais fácil de ver T4 em ação é criar um novo projeto no Visual Studio. Eu vai ser Gerando código translation from VPE for Csharp neste artigo, para que você possa usar qualquer tipo de projeto que compila código translation from VPE for Csharp. Quando o projeto é aberto, clique com o botão direito do mouse no projeto e selecione Add | New Item. Selecione o arquivo de texto da caixa de diálogo Add New Item (não há nenhum modelo de item dedicado T4 no Visual Studio 2008, mas haverá em 2010) e nomeie o arquivo Simple.tt (Certifique-se de que você usa a extensão .tt). Assim que o arquivo é carregado para o projeto você imediatamente verá um arquivo Simple.cs aparecem atrás Simple.tt na janela Solution Explorer (consulte 1 Figura ).

Figura 1 translation from VPE for Csharp arquivo atrás de um modelo T4

Simple.tt e Simple.cs será iniciado como arquivos vazios. Se você clique com o botão direito do mouse no arquivo Simple.tt e selecione Propriedades, você verá que o Visual Studio atribuído TextTemplatingFileGenerator como a ferramenta personalizada para o arquivo (consulte do Figura 2). Esse gerador é o mecanismo de T4 transformará o arquivo de modelo em um arquivo de código translation from VPE for Csharp.

Figura 2 Propriedades do modelo T4

Para tornar o modelo de fazer algo interessante, adicione o seguinte código:

<#@ template language="c#v3.5" #>
<#@ assembly name="System.Web.Mvc.DLL" #>
<#@ import namespace="System.Web.Mvc" #>

public class Test
{
<# for(int i = 0; i < 5; i++) { #>
  public int Prop<#= i #> { get; set; }
<# } #>
}

O código começa com algumas diretivas. As diretivas permitem que você especificar a linguagem de programação para o modelo e incluir namespaces e assemblies necessários pelo código no modelo. Quero enfatizar que estou falando de configurações necessárias para executar código no modelo e não o código no projeto propriamente dito. Você também pode usar uma diretiva para especificar a extensão do arquivo de saída. O padrão é translation from VPE for Csharp, mas como mencionei anteriormente, você pode gerar código de Visual Basic, XML, HTML ou qualquer artefato textual.

As diretivas que estou usando informar ao mecanismo do modelo para usar o compilador translation from VPE for Csharp que vem com o Microsoft .NET Framework 3.5. Ela também informa o mecanismo de modelo para fazer referência ao assembly de ASP.NET MVC e para trazer o namespace System.Web.Mvc para o escopo. O MVC assembly e namespace não são realmente exigidos pelo código simples do modelo, mas eu os colocar no modelo como exemplo.

Após as diretivas, o texto que você vê que não é entre < # e # > delimitadores é colocado textual no arquivo de saída. O texto entre < # e # > é translation from VPE for Csharp código. O mecanismo de modelo irá analisar o código e adicioná-lo a uma classe para execução (uma classe, por fim, derivada da classe TextTransformation no conjunto de módulos (assembly) Microsoft.VisualStudio.TextTemplating). Esse processo é semelhante ao processo de mecanismo do modo de exibição do ASP.NET onde o código e marcação em um arquivo .aspx são adicionados a uma classe, por fim, derivada do System.Web.UI.Page. Se você já foi escrevendo suas exibições do MVC usando o mecanismo de exibição de Web Forms, você se sentirá à vontade criando modelos. Em arquivos .aspx, você pode usar código translation from VPE for Csharp para gerar HTML. No meu arquivo .tt, estou usando código translation from VPE for Csharp para gerar código translation from VPE for Csharp.

O código que tenho em Simple.tt produzirá a seguinte saída translation from VPE for Csharp Simple.tt.cs:

public class Test
{
  public int Prop0 { get; set; }
  public int Prop1 { get; set; }
  public int Prop2 { get; set; }
  public int Prop3 { get; set; }
  public int Prop4 { get; set; }
}

Claro, a classe de teste é totalmente inútil e wholly desinteressantes, mas espero que ele lhe dá uma idéia das possibilidades existentes com modelos T4. Porque você estiver escrevendo um código translation from VPE for Csharp no modelo, você pode se conectar a bancos de dados, ler dados do sistema de arquivos, analisar XML ou usar qualquer classe do .NET para conectar-se e ler os metadados que existe em algum lugar no seu ambiente. Esses metadados, como um esquema de banco de dados ou os tipos de outro assembly, são informações que você pode usar para gerar classes. As classes se tornará parte do projeto atual, portanto, eles serão compilados no assembly atual e você pode usá-los em seu aplicativo.

Edição T4
Quando você está editando T4 modelos no Visual Studio, você não terá nenhuma ajuda dos serviços de linguagem no IDE, como o IntelliSense e realce de sintaxe. Há duas soluções para esse problema. Um é o editor Visual T4 disponibilizou Clarius Consulting (de visualt4.com ). Outra solução é o Editor T4 tangíveis da tangíveis Engineering (de t4 editor.tangible-engineering.com ).

Com um entendimento básico de como os modelos T4 funcionam, let’s Observe como o MVC framework usa modelos T4.

T4 no ASP.NET MVC

Você estava usando modelos T4 toda vez que você utilizou o Adicionar modo de exibição ou o controlador adicionar recursos em um projeto ASP.NET MVC. Esses modelos estão localizados na instalação do Visual Studio dentro da pasta de 2\CodeTemplates Common7\IDE\ItemTemplates\CSharp\Web\MVC. Também existem versões do Visual Basic do modelo, mas deixarei isso como um exercício para o leitor para deduzir o nome da pasta.

Os modelos em si fornecem uma excelente educação sobre o valor e os recursos do T4. Por exemplo, aqui está um trecho da List.tt na subpasta AddView da CodeTemplates:

if(!String.IsNullOrEmpty(mvcViewDataTypeGenericString)) {
  Dictionary<string, string> properties =
    new Dictionary<string, string>();
  FilterProperties(mvcHost.ViewDataType, properties);
#>
  <table>
    <tr>
      <th></th>
<#
  foreach(KeyValuePair<string, string> property in properties) {
#>
      <th>
        <#= property.Key #>
      </th>
<#
  }
#>

O trabalho de List.tt é produzir um arquivo .aspx que exibirá uma coleção de objetos do modelo em formato tabular. No modelo você pode ver a tabela, tr e th marcas que estão sendo gravadas. Para produzir o arquivo .aspx o modelo precisa de algumas informações contextuais, como o nome da página mestra deve usar e o tipo de modelo. O modelo pode recuperar essas informações de seu objeto de host. O objeto host fica entre um modelo e o mecanismo T4 e pode dar um modelo de acesso a recursos (como arquivos locais) e das configurações do ambiente. Normalmente, o host é o Visual Studio, mas a equipe de MVC criou um host personalizado do tipo MvcTextTemplateHost no conjunto de módulos (assembly) Microsoft.VisualStudio.Web.Extensions. É esse objeto de host personalizado que carrega consigo informações digitadas nas caixas de diálogo Adicionar controladora e adicionar modo de exibição, que são as coisas mais próximos que você encontrará a assistentes em um projeto do MVC.

List.TT irá executar um loop através da exibição Propriedades do objeto com rigidez de tipos de modelo e criar uma tabela com uma coluna para cada propriedade. O modelo usa a reflexão para descobrir as propriedades disponíveis do modelo em um método FilterProperties. FilterProperties é um método auxiliar posteriormente definido no arquivo de modelo. O modelo também configura os links para navegar até as ações de edição e detalhes e configura as diretivas apropriadas @ Page ou @ Control para .aspx, dependendo se você estiver criando um modo de exibição ou um modo de exibição parcial.

Quando terminar o modelo em execução, você terá um novo .aspx exiba com tudo o que é necessário para exibir uma coleção de objetos do modelo. Provavelmente você ir para o arquivo .aspx e realizar alguns ajustes para o modo de exibição consistente com a aparência dos modos de exibição no restante do seu aplicativo.

Se você achar que está sempre fazendo as mesmas alterações para esses modos de exibição gerados (ou o código de controlador gerado pelo Controller.tt), você pode economizar tempo, modificando os modelos em si. Por exemplo, você poderia modificar os modelos internos para adicionar atributos de classe para regras de estilo que você usar no seu projeto, ou talvez algo ainda mais drásticas. Tenha em mente que modificar os arquivos de modelo no diretório de instalação do Visual Studio irão alterar o código gerado em todos os projetos que você trabalha com em seu computador. Se você desejar alterar o código gerado para um único projeto, você pode fazer isso, muito.

Personalização de T4-projeto

Se você desejar versões personalizadas dos modelos de geração de código em uma base per project, sua primeira etapa é copiar a pasta CodeTemplates da instalação do Visual Studio e colá-lo na raiz do seu projeto ASP.NET MVC. Você Don precisa copiar todos os modelos em seu projeto, no entanto. Você pode copiar apenas os modelos que você deseja modificar. Há um total de seis modelos de geração de código MVC, um para adicionar um controlador (Controller.tt) e cinco para adicionando modos de exibição (List.tt Create.tt, Empty.tt Details.tt, Edit.tt,). Se existir um modelo no seu projeto, ele substituirá o modelo no diretório de instalação do Visual Studio.

Quando você adiciona um arquivo .tt a uma solução do Visual Studio, o IDE atribuirá automaticamente o arquivo .tt uma configuração de ferramenta personalizada de TextTemplatingFileGenerator. Você já viu esse comportamento se você criou o modelo Simple.tt discutido anteriormente. No entanto, isso não é a configuração correta para os modelos de T4 MVC. As ferramentas MVC para o Visual Studio irão chamar esses modelos em momentos apropriados e criar o objeto MvcTextTemplateHost especial durante o processamento do modelo. Assim, após copiar os modelos em seu projeto, a segunda etapa é abrir a janela de propriedades para cada arquivo de modelo e remover a configuração da ferramenta personalizada (deixe em branco configuração). Neste ponto, você estará pronto para personalizar seus modelos.

Propriedades MvcTextTemplateHost
Observe que nem todas as propriedades no objeto MvcTextTemplateHost estão disponíveis para cada contexto. Os modelos executar ao chamar Adicionar modo de exibição e Controller adicionar itens de menu de contexto. A propriedade Namespace está disponível para os dois essas operações e será definida como o valor apropriado. A propriedade de página mestre, no entanto, só é definida como um valor válido durante uma operação Adicionar modo de exibição e irá conter o valor inserido para o nome da página mestre na caixa de diálogo Adicionar modo de exibição pelo usuário.

Como exemplo, let’s que você não quiser que os controladores de uma ação de índice. Você preferir usar uma ação padrão denominada lista. Você pode abrir o modelo Controller.tt na pasta CodeTemplates\AddController e alterar a área adequada do código para a seguinte aparência:

public class <#= mvcHost.ControllerName #> : Controller
{
  // GET: /<#= mvcHost.ControllerRootName #>/

  public ActionResult List()
  {
    return View();
  }
...

Esta é uma alteração simples para fazer, mas ele pode salvar você e sua equipe um pouco de tempo durante a vida útil de um projeto grande.

Um passo adiante — T4MVC

No segundo semestre de 2009, David Ebbo da equipe do ASP.NET criado T4MVC, um modelo T4 projetado para gerar auxiliares com rigidez de tipos em um aplicativo ASP.NET MVC. Ebbo tem refinado o modelo ao longo do tempo e você agora pode baixá-la de aspnet.codeplex.com/wikipage?title=T4mvc.

O modelo T4MVC é um modelo T4 tradicional. Adicione T4MVC.tt e seu arquivo de configurações associadas (T4MVC.settings.t4) a seu projeto e ele usará a ferramenta personalizada TextTemplatingFileGenerator para gerar código translation from VPE for Csharp. T4MVC ajudará você a eliminar muitos dos literais da cadeia de caracteres magic do seu aplicativo MVC. Por exemplo, um dos trabalhos que fará o modelo é verificar as pastas de conteúdo e scripts em seu projeto e gerar classes com propriedades estáticas para representar cada script e parte do conteúdo.

O código gerado significa que você pode processar a exibição de parcial LogOnUserControl fornecida pelo projeto do MVC padrão com este código:

<% Html.RenderPartial(MVC.Shared.Views.LogOnUserControl); %>

Anteriormente você seria tiver usado um literal de cadeia de caracteres:

<% Html.RenderPartial("LogOnUserControl"); %>

Se alguém renomeia, move ou exclui o LogonUserControl, o código com rigidez de tipos produzirá um erro de compilação quando compila o modo de exibição. Juntamente com rigidez acesso a modos de exibição e modos de exibição parciais, o modelo T4MVC também oferece com rigidez de tipos de acesso a todos os arquivos dentro de suas pastas de conteúdo e scripts e com rigidez de tipos acesso a controladores e ações do controlador.

Você pode usar as classes geradas T4MVC durante a criação de links de ação, retornando resultados de modo de exibição e mesmo quando a tabela de roteamento para um aplicativo de criação. Observe que, quando você adiciona pela primeira vez T4MVC para seu projeto, você verá alguns avisos gerados na janela de lista de erros do IDE. Esses avisos são apenas T4MVC informando você sobre alguns altera está sendo aplicada ao seu código. A maioria dessas alterações são nada que altere o comportamento do seu aplicativo; os modelos T4MVC basta adicionar algumas palavras-chave parcial a definições de classes do controlador e também fará com que os métodos de ação não-virtuais virtual.

Mais fácil de manter

T4 é um tesouro maravilhoso dentro do Visual Studio mas ainda não falha. Este artigo fornece tudo o que você precisa para começar a usar modelos personalizados para seu projeto ASP.NET MVC. Felizmente, você pode encontrar alguns usos para modelos T4 outside of seu projeto de aplicativo da Web, muito. Você deve também testar modelos T4MVC em seu projeto, como eles tornam o seu código mais fácil de manter e refatorar. T4 tecnologia no futuro, é ainda melhor no Visual Studio 2010 com a adição de modelos de item dedicado e pre-compiled modelos.

May 4, 2010

Como Alterar o Framework no iis7

Simples, porém escondido :)

1. Abra o IIS ( Saiba Como ? )

2. Clique em “Application Pools”, conforme imagem abaixo:

3. No Painel do lado (direito) clique no “Website” que você deseja alterar o Framework, conforme imagem abaixo:

4. Na Barra Lateral, Localize por “Edit Application Pool” e clique em Basic Settings, conforme imagem abaixo

5. Ao clicar em “Basic Settings…”, será exibido a seguinte tela de seleção de FrameWork:

6. Agora, selecione o FrameWork da sua preferencia clicando na listagem do “.Net FrameWork version”:, Conforme imagem abaixo:

7. Após selecionado clique em “OK”

8. Seja Feliz, A Versão que você selecionou do Framework já está funcionando \o/

April 28, 2010

Web.config no Asp.Net 4.0

Se pararmos para comparar o arquivo Web.config desde a versão 1.1 do ASP.NET, hoje temos um arquivo imenso, extremamente crítico, com várias novas configurações como AJAX, roteamento e interação com IIS 7, etc . No .NET Framework 4, as configurações importantes foram movidas para o arquivo Machine.config e as aplicações WEB agora herdam estas definições deste arquivo. Isso permite que o arquivo Web.config no ASP.NET 4 pode estar vazio ou apenas conter as linhas que definem para qual versão do framework a aplicação foi dessenvolvida.

<?xml version="1.0"?>
<configuration>
     <system.web>
          <compilation debug="true" targetFramework="4.0" />
     </system.web>
</configuration>