Nancy – usando parâmetros

nancy-logo
Facebooktwittergoogle_plusredditpinterestlinkedinmail

Hoje vamos ver como utilizar parâmetros em aplicações rodando sob o Nancy, um framework web extremamente leve que vimos anteriormente aqui. Para começar, vamos criar uma nova aplicação web com o template em branco no Visual Studio, da mesma forma que fizemos em nosso post sobre Nancy. Após criar a aplicação, utilizando o NuGet, instale o pacote do Nancy:

Install-Package Nancy

E como host vamos utilizar o ASP.NET, então, instale o pacote abaixo:

Install-Package Nancy.Hosting.Aspnet

Agora, crie uma classe com o nome HelloNancy e coloque o seguinte código:

using Nancy;

namespace HelloNancy
{
    public class HelloNancy : NancyModule
    {
        public HelloNancy()
        {
            Get["/"] = parameters => "Hello Nancy";
        }
    }
}

Até agora nenhuma novidade, então vamos criar uma nova rota, que receberá um parâmetro, para isso, insira a seguinte linha dentro do método HelloNancy:

Get["/ola/{nome}"] = parameters => $"Ola {parameters.nome}, seja bem vindo ao Nancy";

Agora rode a aplicação, e no browser digite o conteúdo abaixo:

http://localhost:63409/ola/Desenvolvedor Ninja

Lembre-se de substituir a porta 63409 pela porta que sua aplicação está rodando. E o resultado será a exibição da mensagem “Ola Desenvolvedor Ninja, seja bem vindo ao Nancy”. Com o Nancy a utilização de parâmetros é simples, graças ao Dynamic do .net. Repare que definimos o nome do parâmetro na nossa rota colocando-o entre chaves dessa forma: {nome}. E para utilizá-lo, bastou fazermos parameters.nome em nosso código.

O Nancy permite que você defina tipos e restrições para os parâmetros, por exemplo, veja o código abaixo:

Get["/nomecompleto/{nome:minlength(8)}"] = parameters => $"Ola {parameters.nome}, seja bem vindo ao Nancy";

Repare que quando definimos o parâmetro nome, acrescentamos :minlength(8), e dessa forma estamos dizendo ao Nancy que não aceite valores com menos de 8 caracteres para o parâmetro nome.

Também podemos definir que um parâmetro só aceite valores inteiros, da seguinte forma:

Get["/soma/{valor1:int}/{valor2:int}"] = parameters => $"{parameters.valor1} + {parameters.valor2} = {Soma(parameters.valor1, parameters.valor2)}";

Veja que bastou adicionar :int na declaração de nosso parâmetro. Agora crie um método chamado Soma com o seguinte código:

private dynamic Soma(int valor1, int valor2)
{
    return valor1 + valor2;
}

Rode a aplicação e tente passar valores diferentes de inteiro em um dos parâmetros e veja o resultado. Podemos também definir qual o valor mínimo ou máximo permitido, veja o código abaixo:

Get["/idade/{idade:min(18)}"] = parameters => $"Sua idade: {parameters.idade}";

No código acima, dissemos ao Nancy que ele só deve aceitar valores inteiros, e que o valor mínimo é 18. Para definir um valor máximo, basta trocar min por max. E se quisermos que o valor fique dentro de um limite mínimo e máximo? Basta utilizar o :range, conforme abaixo:

Get["/peso/{peso:range(50,150)}"] = parameters => $"Seu peso: {parameters.peso}";

Até agora vimos como utilizar parâmetros definidos em nossa rota, agora e para pegar valores passados através de querystring? Também é bastante simples, basta utilizarmos Request.Query[“nomedoparametro”], conforme abaixo:

Get["/subtrair"] = parameters => $"Resultado: {Subtrair(Request.Query["valor1"], Request.Query["valor2"])}";

Em nosso código acima, estamos esperando dois parâmetros, chamados valor1 e valor2, que devem ser passados via querystring. Crie um método chamado Subtrair conforme o código abaixo para testarmos nossa aplicação:

private dynamic Subtrair(int valor1, int valor2)
{
    return valor1 - valor2;
}

Agora execute nossa aplicação e digite o conteúdo abaixo no seu browser:

http://localhost:63409/subtrair?valor1=100&valor2=20

E veja como resposta “Resultado: 80”. Viu só? o uso de valores passados via querystring também é extremamente simples com o Nancy.

As seguintes restrições estão disponíveis no Nancy:
int – permite apenas valores do tipo int.
long – permite apenas valores do tipo long.
decimal – permite apenas valores do tipo decimal.
guid – permite apenas valores do tipo GUID.
bool – permite apenas valores do tipo boolean.
alpha – permite apenas valores contendo caracteres alfabéticos.
datetime – permite apenas valores do tipo data, sendo opcional valores contendo hora.
datetime(format) – permite apenas valores do tipo data, desde que respeitem o formato definido em format.
min(minimum) – permite apenas valores inteiros maiores ou iguais ao definido em minimum.
max(maximum) – permite apenas valores inteiros menores ou iguais ao definido em maximum.
range(minimum, maximum) – permite apenas valores inteiros que estejam entre o intervalo definido.
minlength(length) – Permite apenas valores que tenham tamanhos maiores ou iguais ao tamanho informado.
maxlength(length) – Permite apenas valores que tenham tamanhos menores ou iguais ao tamanho informado.
length(minimum, maximum) – permite apenas valores que tenham tamanho que esteja entre o intervalo definido.
version – permite apenas valores do tipo Version, exemplo 1.2.0.

Com o Nancy fica muito simples e fácil de trabalharmos com rotas e parâmetros, e em breve veremos mais sobre sua flexibilidade com rotas e parâmetros.

Quase 20 anos de experiência no mercado de TI.
Atuação em grandes empresas como Netshoes, Borland, JBS, Bradesco, Hospital das Clínicas, Rede, Prodam, HSPE, Instituto Ayrton Senna, e também em empresas internacionais como Delta Dental, T-Mobile, Pepsi e Mckesson.
Fundador da TecPrime Solutions, administrador da comunidade nopCommerce Brasil, e autor dos sites InvestFacil.net e Desenvolvedores.ninja

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *