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
|