RewritePlugin

Reescreve pedidos.

Captura de tela de um prompt de comando com o Proxy de Desenvolvimento reescrevendo uma solicitação de API de entrada.

Exemplo de configuração

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "RewritePlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "rewritePlugin"
    }
  ],
  "rewritePlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rewriteplugin.schema.json",
    "rewritesFile": "rewrites.json"
  }
}

Propriedades de configuração

Propriedade Descrição Predefinido
rewritesFile Caminho para o arquivo que contém definições de regravação rewrites.json

Opções de linha de comando

Nenhuma

Reescrever exemplos de arquivo

Seguem-se exemplos de regras de reescrita.

Reescreva todas as solicitações de HTTP para HTTPS

Reescreva todas as solicitações de HTTP para HTTPS. Neste contexto, tudo significa todas as solicitações configuradas com o Dev Proxy ou o RewritePlugin.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rewriteplugin.rewritesfile.schema.json",
  "rewrites": [
    {
      "in": {
        "url": "^http://(.*)"
      },
      "out": {
        "url": "https://$1"
      }
    }
  ]
}

Definir um cabeçalho de pedido

Defina o Accept-Language cabeçalho de todos os pedidos para https://api.contoso.com. Se o pedido já tiver o cabeçalho, o plugin substitui o seu valor. Se o cabeçalho estiver em falta, o plugin adiciona-o. Como a regra não especifica um URL de saída , o plugin não altera o URL do pedido.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rewriteplugin.rewritesfile.schema.json",
  "rewrites": [
    {
      "in": {
        "url": "^https://api\\.contoso\\.com/"
      },
      "out": {
        "headers": [
          {
            "name": "Accept-Language",
            "value": "nl-NL"
          }
        ]
      }
    }
  ]
}

Pedidos de reescrita para uma URL a partir de uma variável de ambiente

Reescrever os pedidos para https://api.contoso.com a URL base armazenada na API_BASE_URL variável de ambiente, preservando o resto do caminho.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rewriteplugin.rewritesfile.schema.json",
  "rewrites": [
    {
      "in": {
        "url": "^https://api\\.contoso\\.com/(.*)"
      },
      "out": {
        "url": "${env:API_BASE_URL}/$1"
      }
    }
  ]
}

Simula propriedades de arquivo

Propriedade Descrição Obrigatório
rewrites Matriz de objetos de reescrita que define a lista de regras de reescrita que o RewritePlugin aplica às solicitações intercetadas sim

Reescrever objeto

Cada regra de reescrita tem as seguintes propriedades:

Propriedade Descrição Obrigatório
in Reescreva o padrão para corresponder à solicitação de entrada. sim
out Reescrever padrão para reescrever a solicitação sim

Observações

Se a solicitação intercetada pelo RewritePlugin não corresponder a todas as propriedades definidas no padrão in, o plug-in não aplicará a regra de regravação à solicitação.

Padrão de reescrita

Cada padrão de reescrita tem as seguintes propriedades:

Propriedade Descrição Obrigatório Valor predefinido Valores de exemplo
url No padrão in , expressão regular que o plugin aplica à URL. No padrão out , URL para reescrever o pedido. Se o omitir no padrão out , o plugin não altera o URL do pedido. sim, entra, não, entra, sai ^http://(.*)
headers Array de cabeçalhos de pedido para definir no pedido. Suportado apenas no padrão para fora . no

Observações

O padrão out deve especificar url, headers, ou ambos.

Se você usar grupos de captura na expressão regular nos padrões in , poderá fazer referência a eles no padrão out . Por exemplo, se quiser reescrever http://example.com/foo no https://example.com/foo, você pode usar a seguinte regra de reescrita:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rewriteplugin.rewritesfile.schema.json",
  "rewrites": [
    {
      "in": {
        "url": "^http://(.*)"
      },
      "out": {
        "url": "https://$1"
      }
    }
  ]
}

Na URL de saída , podes referenciar variáveis de ambiente usando a ${env:VAR_NAME} sintaxe. Dev Proxy insere o valor da variável de ambiente as-is, pelo que o valor também pode referir-se a grupos de captura do padrão in . O Dev Proxy resolve as variáveis de ambiente apenas para pedidos que correspondem ao padrão in e não expande as variáveis de ambiente no padrão in . Se uma variável de ambiente referenciada não estiver definida, o Proxy de Desenvolvimento regista um erro e ignora a regra de reescrita.

Cabeçalho da requisição

Cada cabeçalho de pedido tem as seguintes propriedades:

Propriedade Descrição Obrigatório
name Nome do cabeçalho do pedido sim
value Valor a definir para o cabeçalho do pedido sim

Observações

O plugin corresponde aos nomes dos cabeçalhos de forma insensível a maiúsculas e minúsculas. Se o pedido já tiver o cabeçalho, o plugin substitui o seu valor. Se o cabeçalho estiver em falta, o plugin adiciona-o.

O plugin define cabeçalhos apenas em pedidos cujo URL corresponde ao padrão de URL in . O plugin avalia a correspondência antes de aplicar a reescrita do URL da mesma regra, por isso, quando uma regra reescreve tanto o URL como os cabeçalhos, os cabeçalhos aplicam-se aos mesmos pedidos da reescrita do URL.

Pode referenciar variáveis de ambiente nos valores do cabeçalho usando a ${env:VAR_NAME} sintaxe. O Proxy de desenvolvimento resolve-os da mesma forma que na URL de saída , e ignora a regra de reescrita se uma variável de ambiente referenciada não estiver definida. Os valores de cabeçalho não suportam grupos de captura do padrão in .