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

Vista: 21930|Resposta: 1

[WebAPI] Definição de propriedade de rota da API web

[Copiar link]
Publicado em 28/04/2018 10:37:11 | | | |
ASP.NET roteamento de API Web, simplificando, é o processo de mapear as requisições do cliente para as Ações correspondentes. No artigo "ASP.NET Web API Practice Series 03, Templates de Roteamento, Convenções de Roteamento, Configurações de Roteamento", experimentei a definição de rotas por meio de templates, convenções e métodos HTTP, e a vantagem dessa abordagem é que os templates de roteamento são posicionados uniformemente na classe WebApiConfig sob a pasta App_Start, o que é conveniente para o gerenciamento, mas a desvantagem é que não é flexível o suficiente.


O REST trata tudo como um recurso e, às vezes, um recurso com recursos filhos, como Cliente e Pedidos, pode querer inserir uma solicitação como clientes/1/pedidos, mas é difícil alcançar esse caminho apenas por convenção. Na verdade, ASP.NET Web API nos oferece um recurso de Rota, que pode ser conectado diretamente ao Action, o que é muito flexível e intuitivo de usar.

Vamos experimentar como usar o recurso de Rota em ASP.NET MVC4.

Permitir o atributo Rota


Primeiro, você precisa configurar no WebApiConfig.



O método MapHttpAttributeRoutes acima está disponível apenas em versões mais recentes da API Web ASP.NETSe sua versão estiver relativamente baixa, você pode desinstalar a versão antiga e instalar a versão mais recente pelo console NuGet Package Manager.


Em seguida, no Global.asax, você precisa comentar a forma original de registrar o WebApiConfig e adotar um novo método, conforme segue:

Neste momento, a execução do projeto pode reportar o seguinte erro:

Isso porque, ao baixar a versão mais recente da API ASP.NET Web, também baixei a versão mais recente do icrosoft. AspNet.WebApi.HelpPage。 Você pode desinstalar a versão mais recente da Página de Ajuda e baixar a versão antiga.

Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force
Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre


Use a propriedade Rota

Crie uma classe Cusomter.


Crie uma classe de Ordem.

Crie uma classe de Banco de Dados para obter a coleção de Pedidos.



Crie um controlador de API vazio escrito assim:


Digite o seguinte no seu navegador:

Se você estiver usando ASP.NET MVC4 para desenvolvimento, pode receber o seguinte erro quando o programa for executado pela primeira vez:

[A] System.Web.WebPages.Razor.Configuration.HostSection não pode ser transmitido para [B]System.Web.WebPages.Razor.Configuration.HostSection. O Tipo A deriva de "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (em "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ no contexto "Padrão") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). O Tipo B deriva de "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (em contexto "Default" em "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ Arquivos ASP.NET Temporários/vs/feb7ce97/a525d58a/asse


Isso porque a versão mais recente do Razor é usada ao baixar a versão mais recente da API Web ASP.NET. Você precisa configurar a seguinte configuração no diretório raiz do Web.config:


Use o recurso RoutePrefix


Se você quiser prefixar todas as Ações em um controlador de API, pode colocar o recurso RoutePrefix no controlador de API.

Por exemplo, queremos que seja em um formato assim: http://localhost/api/customers/1/orders


Modifique o OrdersController dessa forma.


Você também pode usar ~ na função Rota para sobrescrever as regras de prefixo da Ação.



O prefixo definido pela funcionalidade RoutePrefix também pode ter variáveis de parâmetro:


Restrições de roteamento

Você pode restringir variáveis de parâmetros em uma rota por "{nome da variável do parâmetro: restrição}".


Acima, se o id da variável do fragmento for do tipo int, ele é direcionado para a primeira Ação e, se não, é direcionado para a segunda Ação.

ASP.NET restrições embutidas da Web API incluem:

{x:alpha} restringe letras maiúsculas e minúsculas
{x:bool}
{x:data-hora}
{x:decimal}
{x:duplo}
{x:float}
{x:guid}
{x:int}
{x:comprimento(6)}
{x:length(1,20)} restringe a faixa de comprimento
{x:long}
{x:maxlength(10)}
{x:min(10)}
{x:range(10,50)}
{x:regex(regex)}


Você pode definir múltiplas restrições para uma variável de parâmetro ao mesmo tempo:

Implemente a interface IHttpRouteConstraint para personalizar as regras de restrição. Implemente uma restrição que não possa ser 0.


Registre uma restrição personalizada no WebApiConfig na pasta App_Start.


Use restrições personalizadas.


Parâmetros opcionais e seus valores padrão

Se uma variável do parâmetro de roteamento for opcional, o parâmetro também deve receber um valor padrão.


Adicione ? após a restrição para indicar opcional, e defina o valor padrão de id nos parâmetros do método.

Defina um nome para a rota



Prioridade de roteamento

A prioridade de rota definida pela propriedade Route é determinada com base em convenções e na propriedade RouteOrder.

As convenções são:

1. Variáveis estáticas de fragmentos
2. Fragmentar variáveis com restrições
3. Variáveis fragmentadas sem restrições
4. Variável de fragmento coringa com restrições
5. Variáveis de fragmento coringa sem restrições

O valor padrão da propriedade RouteOrder é 0, e quanto menor o valor da propriedade, maior ele é.


Acima, a ordem de prioridade para roteamento é:

variável estática de fragmentos orders/details, o valor da propriedade RouteOrder é 0
orders/{id} com variáveis fragmentadas restritas com valor 0 na propriedade RouteOrder
orders/{customerName} é uma variável fragment sem restrições, e o valor da propriedade RouteOrder é 0
orders/{*date} é uma variável de fragmento coringa com valor 0 na propriedade RouteOrder
ordens/valor da propriedade da Ordem pendente de 1






Anterior:Mantenha um registro do que pode ser pago com cartão de crédito
Próximo:Impossível fornecer um processo para um ADO.NET com o nome fixo "MySql.Data.MySqlClient"...
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