Delen via


MockResponsePlugin

Hiermee worden antwoorden gesimuleerd.

Schermopname van een opdrachtprompt met Dev Proxy die antwoord simuleert voor een aanvraag naar de GitHub-API.

Definitie van invoegtoepassingexemplaren

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

Configuratievoorbeeld

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

Configuratie-eigenschappen

Vastgoed Beschrijving Verstek
mocksFile Pad naar het bestand met gesimuleerde antwoorden mocks.json
blockUnmockedRequests Antwoord retourneren 502 Bad Gateway voor aanvragen die niet worden gesimuleerd false

Opdrachtregelopties

Naam Beschrijving Verstek
-n, --no-mocks Het laden van mock-aanvragen uitschakelen false
--mocks-file Pad naar het bestand met gesimuleerde antwoorden -

Voorbeelden van mocks-bestanden

Hieronder volgen voorbeelden van mock-objecten.

Reageren met hoofdtekst

Antwoord op een aanvraag met een 200 OK-antwoord en een JSON-hoofdtekst.

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

Reageren met fout

Reageer op een aanvraag met een antwoord van 404 Niet gevonden.

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

Reageren met binaire gegevens

Reageer op een aanvraag met een binaire installatiekopieën die zijn geladen vanuit een bestand op schijf.

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

Reageren op nth aanvraag

Reageer alleen op een aanvraag na de tweede keer dat deze wordt aangeroepen.

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

Reageren die overeenkomt met de hoofdtekst van de aanvraag

Reageer op een aanvraag die een specifieke tekenreeks in de hoofdtekst bevat.

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

Gespiegelde aanvraaggegevens in reactie

Reageer met gegevens die waarden uit de aanvraagbody spiegelen met behulp van @request.body.* tijdelijke aanduidingen.

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

Gezien de volgende aanvraag:

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

Het antwoord is:

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
}

Eigenschappen van mocks-bestanden

Vastgoed Beschrijving Verplicht
request Aanvraagobject waarmee de aanvraag wordt gedefinieerd waarop moet worden gereageerd ja
response Antwoordobject dat het antwoord definieert dat moet worden geretourneerd ja

Verzoekobject

Elke aanvraag heeft de volgende eigenschappen:

Vastgoed Beschrijving Verplicht Standaardwaarde Voorbeeldwaarde
url Absolute URL naar een API-eindpunt om op te reageren ja https://jsonplaceholder.typicode.com/posts
method HTTP-werkwoord dat wordt gebruikt om de aanvraag te vergelijken met url Nee GET GET
nth Bepaalt dat de proxy pas moet reageren na het onderscheppen van de aanvraag voor de ne keer Nee 2
bodyFragment Een tekenreeks die aanwezig moet zijn in de hoofdtekst van de aanvraag Nee foo

Opmerkingen

Gebruik een sterretje (*) in de url eigenschap als u een reeks tekens in de URL wilt vergelijken. https://jsonplaceholder.typicode.com/* komt bijvoorbeeld overeen met https://jsonplaceholder.typicode.com/posts en https://jsonplaceholder.typicode.com/comments. In runtime converteert Dev Proxy elk * naar een reguliere expressie .*.

Wanneer u mocks definieert, plaatst u eerst de meest specifieke mocks. Als u bijvoorbeeld twee mocks hebt, één voor en één voor https://jsonplaceholder.typicode.com/postshttps://jsonplaceholder.typicode.com/*, plaatst u eerst de eerste mock. Anders komt Dev Proxy overeen met de tweede mock eerst en retourneert het antwoord voor https://jsonplaceholder.typicode.com/* alle aanvragen.

Gebruik de nth eigenschap als u een andere aanvraag-URL wilt verzenden. Gebruik deze bijvoorbeeld om een langdurige bewerking te simuleren. De eerste keer dat u de API aanroept, wordt er een antwoord met een inprogress bericht geretourneerd. De tweede keer dat u de API aanroept, wordt er een antwoord geretourneerd met het completed bericht. Zie nth voor meer informatie over de eigenschap.

Met behulp van de bodyFragment eigenschap kunt u aanvragen vergelijken op basis van de hoofdtekstinhoud. Als u bijvoorbeeld aanvragen wilt vergelijken die de foo tekenreeks in de hoofdtekst bevatten, stelt u de bodyFragment eigenschap in op foo. Dev Proxy gebruikt bodyFragment alleen voor andere aanvragen dan GET.

Antwoordobject

Elk antwoord heeft de volgende eigenschappen:

Vastgoed Beschrijving Verplicht Standaardwaarde Voorbeeldwaarde
body Hoofdtekst die moet worden verzonden als antwoord op de aanvraag Nee leeg { "foo": "bar" }
statusCode HTTP-statuscode van antwoord Nee 200 404
headers Matrix van headers die moeten worden opgenomen in het antwoord Nee leeg [{ name: "content-type", "value": "application/json" }]

Opmerkingen

Als u binaire gegevens wilt retourneren, stelt u de body eigenschap in op een tekenreekswaarde die begint met @ gevolgd door het bestandspad ten opzichte van het mocks-bestand. Retourneert bijvoorbeeld @picture.jpg de afbeelding die is opgeslagen in het picture.jpg bestand in dezelfde map als het mocks-bestand.

Als u aanvraaggegevens in het antwoord wilt spiegelen, gebruikt @request.body.* u tijdelijke aanduidingen in de hoofdtekst van het antwoord. Retourneert bijvoorbeeld @request.body.displayName de waarde van de displayName eigenschap uit de hoofdtekst van de aanvraag. Deze functie werkt met geneste objecten en matrices, zodat u dynamische antwoorden kunt maken die overeenkomen met de binnenkomende aanvraaggegevens. De vervanging van tijdelijke aanduidingen ondersteunt verschillende typen JSON-waarden, waaronder tekenreeksen, getallen, booleaanse waarden en complexe objecten.

Volgende stap