Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 16017|Resposta: 1

[.NET Core] ASP.NET Implementação de restrições personalizadas de roteamento no Core

[Copiar link]
Publicado em 06/05/2019 09:30:30 | | |
Restrições de roteamento

ASP.NET Core, você pode passar variáveis em URLs definindo templates de roteamento, além de fornecer padrão, opcionais e restrições para variáveis.

A restrição é usada adicionando o nome especificado da restrição à rota do atributo, que é usada da seguinte forma:

Algumas restrições já são fornecidas dentro do framework, conforme segue:

Restrições
exemplo
Exemplos de partidas
ilustrar
int
{id:int}
123456789, -123456789
Corresponda a qualquer inteiro
bool
{active:bool}
verdade, FALSO
Corresponder verdadeiro ou falso (distinção de maiúsculas e minúsculas)
Data-hora
{data de nascimento:data}
31-12-2016, 31-12-2016 19:32
Corresponde a valores válidos de DateTime (em localidade fixa - veja aviso)
Decimal
{preço:decimal}
49.99, -1,000.01
Corresponde a valores decimais válidos (em localidade fixa - veja aviso)
duplo
{peso:dobro}
1.234, -1.001.01e8
Corresponde a valores duplos válidos (em localidade fixa - veja aviso)
Flutuador
{peso:flutuação}
1.234, -1.001.01e8
Corresponde a valores válidos de float (em localidade fixa - veja avisos)
Guid
{id:guid}
CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638}
Corresponde a valores válidos do GUID
Longas
{tic:long}
123456789, -123456789
Corresponde a valores longos válidos
minlength(value)
{nome de usuário:minlength(4)}
Rick
A string deve ter pelo menos 4 caracteres
maxlength(valor)
{nome do arquivo:maxlength(8)}
Richard
As strings não devem exceder 8 caracteres
comprimento(comprimento)
{nomedo do arquivo:comprimento(12)}
somefile.txt
A sequência deve ter exatamente 12 caracteres
Comprimento(min,max)
{nomedo do arquivo:comprimento(8,16)}
somefile.txt
A sequência deve ter pelo menos 8 caracteres e no máximo 16 caracteres
min(valor)
{idade:min(18)}
19
O valor inteiro deve ser pelo menos 18
max(valor)
{idade:max(120)}
91
O valor inteiro não deve exceder 120
Alcance (mínimo, máximo)
{idade:variedade(18,120)}
91
O valor inteiro deve ser pelo menos 18 e não exceder 120
Alpha
{nome:alpha}
Rick
A sequência deve ser composta por um ou mais caracteres alfabéticos (de a a z, com diferenciação de maiúsculas e maiúsculas).
regex(expressão)
{ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)}
123-45-6789
A string deve corresponder à expressão regular (veja dicas para definir expressões regulares)
Necessário
{nome:obrigatório}
Rick
Usado para impor a presença de valores não paramétricos durante a geração de URL


As restrições embutidas funcionam para a maioria dos casos de uso comuns, mas às vezes ainda precisamos personalizar o efeito que queremos.
Restrições de roteamento personalizadas

Uma restrição personalizada é implementar a interface IRouteConstraint e então sobrecarregar o método Match, que possui quatro parâmetros.

O primeiro parâmetro, httpContext, é o contexto da solicitação atual

O segundo parâmetro, rota, é a rota à qual pertence a restrição atual

O terceiro parâmetro, routeKey, é o nome da variável atualmente verificada, como id no exemplo no início do artigo
Os valores do quarto parâmetro são os valores do dicionário que a URL atual corresponde, como a rota do exemplo no início do artigo; se a URL for users/1, então existe um dicionário com chave = id , valor = 1. Claro, também existem valores para outras variáveis, como controlador, ação, etc.

O quinto parâmetro, routeDirection, é um valor enumerado que representa se a URL é solicitada pela web ou gerada por um método como Url.Action.

Por exemplo, queremos definir uma restrição que especifique que os parâmetros passados pela rota devem ser o valor especificado da enumeração.

Vamos definir um enum primeiro:


Então defina as restrições:

Adicione restrições personalizadas ao método ConfigureServices em Startup.cs:
Uso de restrições nas rotas:

(WebApplicationTest é o namespace atual)


{id:int:min(2)} rota deve usar min(2), caso contrário haverá um conflito para id = 0 ou id = 1.

Execute o programa e combine nossas restrições personalizadas quando as rotas são api/test/0, api/test/1, api/test/true e api/test/false.

Se a rota for api/test/{inteiro maior que 2}, corresponda à segunda rota.

Outros casos correspondem à terceira rota.

conclusão

Restrições de roteamento são um recurso muito útil em alguns cenários, que podem reduzir os parâmetros de verificação no controlador, e a função de validação parcial de parâmetros pode ser implementada usando attruibute declarativo, e algumas verificações duplicadas podem ser extraídas em restrições para uso público.

O construtor de restrição pode ser injetado, então pode ser muito extensível, e alguma verificação de parâmetros pode ser feita consultando o banco de dados.

O site oficial menciona brevemente as restrições de roteamento, e este artigo fornece exemplos específicos do uso de restrições de roteamento.





Anterior:Zero Foundation C# (Versão Colorida) Tecnologia Tomorrow
Próximo:ASP.NET Core – Descrição de Uso da Importação da Vista Razor
 Senhorio| Publicado em 06/05/2019 09:32:15 |
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com