Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Simula respostas.
Definição de instância de plug-in
{
"name": "MockResponsePlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "mocksPlugin"
}
Exemplo de configuração
{
"mocksPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.schema.json",
"mocksFile": "mocks.json"
}
}
Propriedades de configuração
| Propriedade | Descrição | Predefinido |
|---|---|---|
mocksFile |
Caminho para o arquivo que contém respostas simuladas | mocks.json |
blockUnmockedRequests |
Resposta de retorno 502 Bad Gateway para solicitações que não são simuladas |
false |
Opções da linha de comandos
| Nome | Descrição | Predefinido |
|---|---|---|
-n, --no-mocks |
Desativar o carregamento de solicitações simuladas | false |
--mocks-file |
Caminho para o arquivo que contém respostas simuladas | - |
Exemplos de arquivos simulados
Seguem-se exemplos de objetos fictícios.
Responda com o corpo
Resposta a uma solicitação com uma resposta 200 OK e um corpo JSON.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.mocksfile.schema.json",
"mocks": [
{
"request": {
"url": "https://graph.microsoft.com/v1.0/me",
"method": "GET"
},
"response": {
"body": {
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"businessPhones": ["+1 412 555 0109"],
"displayName": "Megan Bowen",
"givenName": "Megan",
"jobTitle": "Auditor",
"mail": "MeganB@M365x214355.onmicrosoft.com",
"mobilePhone": null,
"officeLocation": "12/1110",
"preferredLanguage": "en-US",
"surname": "Bowen",
"userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
"id": "48d31887-5fad-4d73-a9f5-3c356e68a038"
},
"headers": [
{
"name": "content-type",
"value": "application/json; odata.metadata=minimal"
}
]
}
}
]
}
Responder com erro
Responda a uma solicitação com uma resposta 404 Não encontrado.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.mocksfile.schema.json",
"mocks": [
{
"request": {
"url": "https://graph.microsoft.com/v1.0/me/photo",
"method": "GET"
},
"response": {
"statusCode": 404
}
}
]
}
Responder com dados binários
Responda a uma solicitação com uma imagem binária carregada de um arquivo no disco.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.mocksfile.schema.json",
"mocks": [
{
"request": {
"url": "https://graph.microsoft.com/v1.0/users/*/photo/$value",
"method": "GET"
},
"response": {
"body": "@picture.jpg",
"headers": [
{
"name": "content-type",
"value": "image/jpeg"
}
]
}
}
]
}
Responda a pedido nth
Responda a uma solicitação somente após a segunda vez que ela for chamada.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.mocksfile.schema.json",
"mocks": [
{
"request": {
"url": "https://graph.microsoft.com/v1.0/external/connections/*/operations/*",
"method": "GET",
"nth": 2
},
"response": {
"statusCode": 200,
"body": {
"id": "1.neu.0278337E599FC8DBF5607ED12CF463E4.6410CCF8F6DB8758539FB58EB56BF8DC",
"status": "completed",
"error": null
}
}
}
]
}
Responder de acordo com o corpo da solicitação
Responda a uma solicitação que contenha uma cadeia de caracteres específica no corpo.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.mocksfile.schema.json",
"mocks": [
{
"request": {
"url": "https://login.microsoftonline.com/fa15d692-e9c7-4460-a743-29f29522229/oauth2/v2.0/token",
"method": "POST",
"bodyFragment": "scope=https%3A%2F%2Fapi.contoso.com%2FDocuments.Read"
},
"response": {
"headers": [
{
"name": "Content-Type",
"value": "application/json; charset=utf-8"
}
],
"body": {
"token_type": "Bearer",
"expires_in": 3599,
"ext_expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSU..."
}
}
}
]
}
Espelhar dados de solicitação em resposta
Responda com dados que espelham valores do corpo da solicitação usando @request.body.* espaços reservados.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.2.0/mockresponseplugin.mocksfile.schema.json",
"mocks": [
{
"request": {
"url": "https://graph.microsoft.com/v1.0/users",
"method": "POST"
},
"response": {
"statusCode": 201,
"body": {
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"id": "12345678-1234-1234-1234-123456789abc",
"businessPhones": "@request.body.businessPhones",
"displayName": "@request.body.displayName",
"givenName": "@request.body.givenName",
"jobTitle": "@request.body.jobTitle",
"mail": "@request.body.mail",
"userPrincipalName": "@request.body.userPrincipalName",
"accountEnabled": "@request.body.accountEnabled",
"createdDateTime": "2024-01-15T10:30:00Z"
},
"headers": [
{
"name": "Content-Type",
"value": "application/json; odata.metadata=minimal"
},
{
"name": "Location",
"value": "https://graph.microsoft.com/v1.0/users/12345678-1234-1234-1234-123456789abc"
}
]
}
}
]
}
Dado o seguinte pedido:
POST https://graph.microsoft.com/v1.0/users
Content-Type: application/json
{
"displayName": "Megan Bowen",
"userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
"accountEnabled": true,
"givenName": "Megan",
"surname": "Bowen",
"jobTitle": "Product Manager"
}
A resposta é:
HTTP/1.1 200 Connection Established
Content-Length: 0
HTTP/1.1 201 Created
Cache-Control: no-store
x-ms-ags-diagnostic:
Strict-Transport-Security:
request-id: 12345678-1234-1234-1234-123456789abc
client-request-id: 12345678-1234-1234-1234-123456789abc
Date: 9/10/2025 10:28:35 AM
Content-Type: application/json; odata.metadata=minimal
Location: https://graph.microsoft.com/v1.0/users/12345678-1234-1234-1234-123456789abc
OData-Version: 4.0
Content-Length: 648
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"id": "12345678-1234-1234-1234-123456789abc",
"businessPhones": null,
"displayName": "Megan Bowen",
"givenName": "Megan",
"jobTitle": "Product Manager",
"mail": null,
"mobilePhone": null,
"officeLocation": null,
"preferredLanguage": null,
"surname": "Bowen",
"userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
"accountEnabled": true,
"createdDateTime": "2024-01-15T10:30:00Z",
"department": null,
"companyName": null,
"city": null,
"country": null,
"postalCode": null,
"state": null,
"streetAddress": null,
"usageLocation": null
}
Simula propriedades de arquivo
| Propriedade | Descrição | Obrigatório |
|---|---|---|
request |
Objeto de solicitação que define a solicitação a ser respondida | Sim |
response |
Objeto de resposta que define a resposta a ser retornada | Sim |
Objeto de solicitação
Cada solicitação tem as seguintes propriedades:
| Propriedade | Descrição | Obrigatório | Valor predefinido | Valor da amostra |
|---|---|---|---|---|
url |
URL absoluta para um ponto de extremidade da API para responder | Sim | https://jsonplaceholder.typicode.com/posts |
|
method |
Verbo HTTP usado para corresponder a solicitação com url |
Não | GET |
GET |
nth |
Determina que o proxy deve responder somente depois de intercetar a solicitação pela enésima vez | Não | 2 |
|
bodyFragment |
Uma cadeia de caracteres que deve estar presente no corpo da solicitação | Não | foo |
Observações
Use asterisco * (url) na propriedade se quiser corresponder a qualquer série de caracteres na URL. Por exemplo, https://jsonplaceholder.typicode.com/* corresponde a https://jsonplaceholder.typicode.com/posts e https://jsonplaceholder.typicode.com/comments. Em tempo de execução, o Dev Proxy converte cada * um em uma expressão .*regular.
Ao definir simulações, coloque as simulações mais específicas primeiro. Por exemplo, se você tiver duas simulações, uma para https://jsonplaceholder.typicode.com/posts e outra para https://jsonplaceholder.typicode.com/*, coloque a primeira simulação primeiro. Caso contrário, o Dev Proxy corresponderá à segunda simulação primeiro e retornará a resposta para https://jsonplaceholder.typicode.com/* todas as solicitações.
Use a nth propriedade se precisar enviar um URL diferente para a mesma solicitação. Por exemplo, use-o para simular uma operação de longa duração. Na primeira vez que você chamar a API, ela retorna uma resposta com uma inprogress mensagem. Na segunda vez que você chamar a API, ela retornará uma resposta com a completed mensagem. Para obter mais informações sobre a nth propriedade, consulte Mock nth request.
Usando a bodyFragment propriedade, você pode corresponder solicitações com base no conteúdo do corpo. Por exemplo, se você quiser corresponder às solicitações que contêm a foo cadeia de caracteres no corpo, defina a bodyFragment propriedade como foo. O Dev Proxy usa bodyFragment apenas para solicitações diferentes de GET.
Objeto de resposta
Cada resposta tem as seguintes propriedades:
| Propriedade | Descrição | Obrigatório | Valor predefinido | Valor da amostra |
|---|---|---|---|---|
body |
Corpo a enviar como resposta ao pedido | Não | vazio | { "foo": "bar" } |
statusCode |
Código de status HTTP de resposta | Não | 200 |
404 |
headers |
Matriz de cabeçalhos a serem incluídos na resposta | Não | vazio | [{ name: "content-type", "value": "application/json" }] |
Observações
Se você quiser retornar dados binários, defina a body propriedade como um valor de cadeia de caracteres que começa com @ seguido pelo caminho do arquivo relativo ao arquivo simulado. Por exemplo, @picture.jpg retorna a picture.jpg imagem armazenada no arquivo no mesmo diretório que o arquivo simulado.
Para espelhar os dados da solicitação na resposta, use @request.body.* espaços reservados no corpo da resposta. Por exemplo, @request.body.displayName retorna o displayName valor da propriedade do corpo da solicitação. Esse recurso funciona com objetos e matrizes aninhados, permitindo que você crie respostas dinâmicas que reflitam os dados de solicitação de entrada. A substituição de espaço reservado suporta vários tipos de valor JSON, incluindo cadeias de caracteres, números, booleanos e objetos complexos.