UrlRewrite em ASP.NET 2.0

by Felipe Lambert 10. February 2010 09:03

Para quem que assim como eu, fui "obrigado" a desenvolver a aplicação em 2.0 e um dos requisitos era a url amigável

seguindo um tweet do @RamonDuraes

O componente responde pelo namespace UrlRewritingNet.UrlRewrite, desenvolvido em código aberto pode ser encontrado em  http://www.urlrewriting.net/149/en/home.html possui o download da documentação, binários, exemplo e fonte,

fazendo uso de configurações no webConfig, e possivel reescrever a url exibida para o usuário e realmente acessar outra url no servidor, assim uma url de servidor com querystring como http://www.urlrewriting.net/149/en/home.html facilmente é transformada em: http://www.urlrewriting.net/149/en/home.html.

Várias soluções para reescrever urls com o ASP.NET possui disvantagens, como perder o suporte a Themes e Master Pages, alem de precisar de direitos de Administrador para instalar a Extensão ISAPI no servidor.

Mas nem tudo é maravilha, você so pode reescrever requisições tratadas pelo ISAP no servidor, ou seja extensões .aspx, para outras extensões deve ser feita uma configuração adicional no IIS ISAP. (disponivel na pagina 14 da documentação), pelo mesmo motivo pode não ser possivel a url sem extensão (faça um teste, aqui funcionou), e requests crossPage (este não funcionou... só com segurança desabilitada =/).

O navegador pode se perder com as imagens e a url da página, sendo necessária a inclusão do root "~" e runat="server" nas imagens conforme <image src=“~/images/pictures.gif“ runat=“server“/>

 

A configuração do urlRewrite é feita no webconfig adcionando o codigo abaixo

 <add name="Rule1"  virtualUrl="^~/(.*)/Detail(.*).aspx"            
           rewriteUrlParameter="ExcludeFromClientQueryString" 
           destinationUrl="~/Default.aspx?language=$1&amp;id=$2"
           ignoreCase="true" />

Onde a virutalUrl é a url a ser redirecionada para a destinationUrl sendo facil identificar o (.*) da expressão regular sendo pasado para o $1 da segunda expressão regular em destinationUrl.

A documentação consta os demais parametros possíveis de serem utilizados.

 

Propagação de Transação entre Cliente e Serviço Asmx ou WCF basicHttpBinding

by Admin 11. December 2009 00:01

Faz um tempo que por aqui nao passo, vamos lá

Quando falamos de Serviço na plataforma .NET duas coisas

1- vem a cabeça o muito usado arquivo .asmx onde as mensagens eram enviadas por http serializado:

2- WCF (Windows Communication Foundation), tecnologia mais recente mas com grande aceitação por aceitar vários protocolos, tipos de mensagens, níveis de segurança,  e transação de forma automática ... menos no modo basicHttpBinding que simplesmente serializa e repasa por HTTP basicamente.

Se não possuem suporte .. entao como utilizar Transação iniciada no cliente e enviada ao Serviço,

A O namespace System.Transactions facilita nossa vida com as seguintes classes e métodos:

Dim propToken As Byte() = TransactionInterop.GetTransmiterPropagationToken(Transaction.Current)

No Cliente caso Alguma transação esteja Aberta, o método Transaction.Current retorna a mesma enquanto o Metodo GetTransmiterPropagationToken retorna um objeto do Tipo Byte() para ser passado ao Serviço.

Já no Serviço se pode ser executado os seguintes métodos

Dim trans As Transaction = TransactionInterop.GetTransactionFromTransmiterPropagationToken(propToken)

O objeto Byte() propToken é passado como parâmetro para o Serviço.

A instância da transaction pode ser feita da seguinte forma:

Using tranScope  As New TransactionScope(trans)

'Código a ser executado na Transação

tranScope.Complete()

End Using

 Dessa forma a transação pode ser propagada entre os serviços mesmo sendo basicHttpBinding.

 

 

Remover Acentos

by Felipe Lambert 18. September 2009 13:17

Função simples para remover o acento

Function removeAcentos(ByVal texto As String) As String
   Dim vPos As Byte
   'Constantes de caracteres para remover o acento
   Const vComAcento = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜàáâãäåçèéêëìíîïòóôõöùúûü"
   Const vSemAcento = "AAAAAACEEEEIIIIOOOOOUUUUaaaaaaceeeeiiiiooooouuuu"

   'Varre o texto para identificar os caracterres
   For i = 1 To Len(texto)
      vPos = InStr(1, vComAcento, Mid(texto, i, 1))   'identifica a posição do caractere a ser subistituido caso exista
      If vPos > 0 Then
         Mid(texto, i, 1) = Mid(vSemAcento, vPos, 1)   'substitui o caractere
      End If
   Next
   removeAcentos = texto 'retorna o item
End Function

O que não Fazer

by Admin 27. August 2009 10:03

Entao pessual...

Gostaria de apresenta-los aos padrões de linguagem que se encontra em produção em aplicações corporativas... como o exemplo abaixo de uso de

If InStr(ConfigurationSettings.AppSettings("PermissaoAcesso"), Session("cd_usuario")) Then

Session("tpUsers") = "Adm"
Session("NOME_USUARIO") = Session("NOME_USUARIO")
Session("e_mail_usuario") = Session("E_MAIL")

End If

 Na verdade o como não utilizar uma sessão.

 

'407 Proxy Authentication Required'

by Felipe Lambert 12. August 2009 08:38

O erro acima é diretamente encontrado quando se precisa da execução de uma chamada a internet via código dentro de uma rede que necessita de proxy como ocorreu comigo ontem.

Então vamos a solução Suponhamos que uma aplicação em C# com o seguinte código.

WebClient client = new WebClient();
Stream rssStream = client.OpenRead(Url); 
StreamReader textReader = new StreamReader(rssStream);
XmlTextReader xmlReader = new XmlTextReader(textReader);
XmlDocument xmlDoc= new XmlDocument();
xmlDoc.Load(xmlReader);

E a aplicação retorne o seguinte erro em Tempo de Execução:

An unhandled exception of type 'System.Net.WebException' occurred in system.dll

Additional information: The remote server returned an error: 407 Proxy Authentication Required.

E seja necessária a implantação da conexão utilizando algum proxy como vemos a seguir em um exemplo para WebClient.

   System.Net.WebProxy proxy = new System.Net.WebProxy(yourproxyserver);
   proxy.Credentials = CredentialCache.DefaultCredentials;
   //if there is username/password for your proxy server setting, uncomment the following statemtnt instead.
   //proxy.Credentials = new NetworkCredential(username, password);
   GlobalProxySelection.Select = proxy;

   WebClient client = new WebClient();
   Stream rssStream = client.OpenRead(Url); 
   StreamReader textReader = new StreamReader(rssStream);
   XmlTextReader xmlReader = new XmlTextReader(textReader);
   XmlDocument xmlDoc= new XmlDocument();
   xmlDoc.Load(xmlReader);

Ou um exemplo para WebRequest.

   System.Net.WebRequest req = System.Net.WebRequest.Create(Url);
   req.Proxy = new System.Net.WebProxy(yourproxyserver, true);
   req.Proxy.Credentials = CredentialCache.DefaultCredentials;
   System.Net.WebResponse resp = req.GetResponse();
   System.IO.StreamReader textReader = new System.IO.StreamReader(resp.GetResponseStream());
   XmlTextReader xmlReader = new XmlTextReader(textReader);
   XmlDocument xmlDoc= new XmlDocument();
   xmlDoc.Load(xmlReader);

Simples mas espero ter ajudado.

 Fonte GiCode

SMTP no Web.Config

by Admin 6. August 2009 10:23

Pode parecer simples mas muita gente utiliza os parâmetros nos construtores da classe no momento de instanciar.

A configuração do smtp pode ser utilizada utilizando oseguinte trecho no web.config

    system.net>
        mailSettings>
            smtp deliveryMethod="Network" from="testuser@domail.com">
                network defaultCredentials="true" host="localhost" port="25" userName="kaushal" password="testPassword"/>
            /smtp>
        /mailSettings>
    /system.net>

O código para utilização pode ser assim. mas de livre alteração.

Dim mMailMessage As New MailMessage()
mMailMessage.From = New MailAddress() 'Do WebConfig
mMailMessage.To.Add(New MailAddress("Destinatario@email.com"))

If Not _com_copia = String.Empty Then
      mMailMessage.CC.Add(New MailAddress("ComCopia@email.com"))
End If

mMailMessage.Subject = _assunto 'Assunto
mMailMessage.Body = _corpo 'Corpo do E-mail
mMailMessage.IsBodyHtml = True ' HTML
mMailMessage.Priority = MailPriority.Normal 'Prioridade

Dim mSmtpClient As New SmtpClient() 'DoWebConfig
mSmtpClient.Send(mMailMessage)

Autenticação em ASP.NET

by Admin 29. July 2009 14:20

Web Palestra sobre Autenticação em ASP.NET e IIS, Melhores práticas de Segurança.

MSDN Patterns & Pratices WebCasts

Bons Estudos !

Sobre Mim

Felipe Augusto Silva Lambert - Analista de Sistemas, experiência em 3 anos desenvolvimento ASP.NET, utilizando tecnologias ServerSide (Design Patterns, Linq, WCF, SQL Server, C# e VB.NET) e ClientSide (JavaScript e Jquery). técnico em Mecatrônica e bacharel em Ciência da Computação.