RewritePlugin

Reescreve as solicitações.

Captura de tela de um prompt de comando com o Dev Proxy 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 Padrão
rewritesFile Caminho para o arquivo que contém definições de reescrita rewrites.json

Opções de linha de comando

Nenhum

Exemplos de regravação de arquivo

A seguir estão exemplos de regras de reescrita.

Reescreva todas as solicitações de HTTP para HTTPS

Reescreva todas as solicitações de HTTP para HTTPS. Nesse contexto, todos significam 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 solicitação

Defina o Accept-Language cabeçalho em todas as solicitações como https://api.contoso.com. Se a solicitação já tiver o cabeçalho, o plug-in substituirá seu valor. Se o cabeçalho estiver ausente, o plug-in o adicionará. Como a regra não especifica uma URL de saída , o plug-in não altera a URL da solicitação.

{
  "$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"
          }
        ]
      }
    }
  ]
}

Reescrever solicitações para uma URL de uma variável de ambiente

Reescreva solicitações para https://api.contoso.com a URL base armazenada na variável de API_BASE_URL ambiente, preservando o restante 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"
      }
    }
  ]
}

Propriedades do arquivo simulado

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 que intercepta 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

Comentários

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

Padrão de reescrita

Cada padrão de reescrita tem as seguintes propriedades:

Propriedade Descrição Obrigatório Valor padrão Valor de exemplo
url No padrão in , expressão regular que o plug-in aplica à URL. No padrão out , a URL para a qual reescrever a solicitação. Se você omitir no padrão de saída , o plug-in não alterará a URL da solicitação. Sim , dentro, não em fora ^http://(.*)
headers Matriz de cabeçalhos de solicitação a serem definidos na solicitação. Com suporte apenas no padrão de saída . no

Comentários

O padrão de saída deve especificar url, headersou ambos.

Se você usar grupos de captura na expressão regular nos padrões in , poderá se referir a eles no padrão out . Por exemplo, se você quiser reescrever http://example.com/foo para https://example.com/foo, poderá 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 , você pode referenciar variáveis de ambiente usando a ${env:VAR_NAME} sintaxe. O Proxy de Desenvolvimento insere o valor da variável de ambiente as-is, de modo que o valor também pode se referir a grupos de captura do padrão in . O Proxy de Desenvolvimento resolve variáveis de ambiente apenas para solicitações que correspondem ao padrão in e não expandem variáveis de ambiente no padrão em . Se uma variável de ambiente referenciada não estiver definida, o Proxy de Desenvolvimento registrará um erro e ignorará a regra de reescrita.

Cabeçalho da solicitação

Cada cabeçalho de solicitação tem as seguintes propriedades:

Propriedade Descrição Obrigatório
name Nome do cabeçalho da solicitação sim
value Valor a ser definido para o cabeçalho da solicitação sim

Comentários

O plug-in corresponde a nomes de cabeçalho sem diferenciar maiúsculas de minúsculas. Se a solicitação já tiver o cabeçalho, o plug-in substituirá seu valor. Se o cabeçalho estiver ausente, o plug-in o adicionará.

O plug-in define cabeçalhos somente em solicitações cuja URL corresponde ao padrão de URL in . O plug-in avalia a correspondência antes de aplicar a reescrita de URL da mesma regra, portanto, quando uma regra reescreve a URL e os cabeçalhos, os cabeçalhos se aplicam às mesmas solicitações que a regravação da URL.

Você pode referenciar variáveis de ambiente em valores de cabeçalho usando a ${env:VAR_NAME} sintaxe. O Proxy de Desenvolvimento os resolve da mesma maneira 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 dão suporte a grupos de captura do padrão in .