Condividi tramite


MockResponsePlugin

Simula le risposte.

Screenshot di un prompt dei comandi con Dev Proxy che simula la risposta per una richiesta all'API GitHub.

Definizione dell'istanza del plug-in

{
  "name": "MockResponsePlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
  "configSection": "mocksPlugin"
}

Esempio di configurazione

{
  "mocksPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.schema.json",
    "mocksFile": "mocks.json"
  }
}

Proprietà di configurazione

Proprietà Descrizione Predefinito
mocksFile Percorso del file contenente risposte fittizie mocks.json
blockUnmockedRequests Risposta restituita 502 Bad Gateway per le richieste non fittizie false

Opzioni della riga di comando

Nome Descrizione Predefinito
-n, --no-mocks Disabilitare il caricamento di richieste fittizie false
--mocks-file Percorso del file contenente risposte fittizie -

Esempi di file fittizi

Di seguito sono riportati esempi di oggetti fittizi.

Rispondere con il corpo

Risposta a una richiesta con una risposta 200 OK e un 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"
          }
        ]
      }
    }
  ]
}

Rispondere con errore

Rispondere a una richiesta con una risposta 404 Non trovato.

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

Rispondere con dati binari

Rispondere a una richiesta con un'immagine binaria caricata da un file su 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"
          }
        ]
      }
    }
  ]
}

Rispondere su nth richiesta

Rispondere a una richiesta solo dopo la seconda chiamata.

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

Rispondere alla corrispondenza del corpo della richiesta

Rispondere a una richiesta che contiene una stringa specifica nel 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..."
        }
      }
    }
  ]
}

Eseguire il mirroring dei dati della richiesta in risposta

Rispondere con i dati che rispecchiano i valori del corpo della richiesta usando @request.body.* segnaposto.

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

Data la richiesta seguente:

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"
}

La risposta è:

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 le proprietà del file

Proprietà Descrizione Obbligatorio
request Oggetto richiesta che definisce la richiesta di risposta
response Oggetto risposta che definisce la risposta da restituire

Oggetto della richiesta

Ogni richiesta ha le proprietà seguenti:

Proprietà Descrizione Obbligatorio Valore predefinito Valore di esempio
url URL assoluto di un endpoint API a cui rispondere https://jsonplaceholder.typicode.com/posts
method Verbo HTTP usato per trovare una corrispondenza con la richiesta url No GET GET
nth Determina che il proxy deve rispondere solo dopo l'intercettazione della richiesta per l'ennesima volta No 2
bodyFragment Stringa che deve essere presente nel corpo della richiesta No foo

Osservazioni:

Usare l'asterisco (*) nella url proprietà se si desidera trovare una corrispondenza con qualsiasi serie di caratteri nell'URL. Ad esempio, https://jsonplaceholder.typicode.com/* corrisponde https://jsonplaceholder.typicode.com/posts a e https://jsonplaceholder.typicode.com/comments. In fase di esecuzione, Dev Proxy converte ognuno * in un'espressione .*regolare.

Quando si definiscono simulazioni, posizionare prima le simulazioni più specifiche. Ad esempio, se sono presenti due simulazioni, una per https://jsonplaceholder.typicode.com/posts e una per https://jsonplaceholder.typicode.com/*, posizionare prima la prima simulazione. In caso contrario, Dev Proxy corrisponde al secondo mock first e restituisce la risposta per https://jsonplaceholder.typicode.com/* tutte le richieste.

Usare la nth proprietà se è necessario inviare un valore diverso allo stesso URL della richiesta. Ad esempio, usarlo per simulare un'operazione a esecuzione prolungata. La prima volta che si chiama l'API, viene restituita una risposta con un inprogress messaggio. La seconda volta che si chiama l'API, viene restituita una risposta con il completed messaggio . Per altre informazioni sulla proprietà, vedere Mock nth request .For more information about the nth property, see Mock nth request.

Usando la bodyFragment proprietà , è possibile associare le richieste in base al contenuto del corpo. Ad esempio, se si desidera trovare una corrispondenza con le richieste che contengono la foo stringa nel corpo, impostare la bodyFragment proprietà su foo. Dev Proxy usa bodyFragment solo per le richieste diverse da GET.

Oggetto Response

Ogni risposta ha le proprietà seguenti:

Proprietà Descrizione Obbligatorio Valore predefinito Valore di esempio
body Corpo da inviare come risposta alla richiesta No vuoto { "foo": "bar" }
statusCode Codice di stato HTTP di risposta No 200 404
headers Matrice di intestazioni da includere nella risposta No vuoto [{ name: "content-type", "value": "application/json" }]

Osservazioni:

Se si desidera restituire dati binari, impostare la body proprietà su un valore stringa che inizia con @ seguito dal percorso del file rispetto al file fittizio. Ad esempio, restituisce @picture.jpg l'immagine archiviata nel picture.jpg file nella stessa directory del file fittizio.

Per eseguire il mirroring dei dati della richiesta nella risposta, usare @request.body.* i segnaposto nel corpo della risposta. Ad esempio, restituisce @request.body.displayName il valore della displayName proprietà dal corpo della richiesta. Questa funzionalità funziona con oggetti e matrici annidati, consentendo di creare risposte dinamiche che riflettono i dati delle richieste in ingresso. La sostituzione del segnaposto supporta vari tipi di valori JSON, tra cui stringhe, numeri, valori booleani e oggetti complessi.

Passo successivo