Freigeben über


MockResponsePlugin

Simuliert Antworten.

Screenshot einer Eingabeaufforderung mit Dev Proxy-Simulation der Antwort für eine Anforderung an die GitHub-API.

Definition der Plug-In-Instanz

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

Konfigurationsbeispiel

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

Konfigurationseigenschaften

Eigentum BESCHREIBUNG Standard
mocksFile Pfad zur Datei, die simulierte Antworten enthält mocks.json
blockUnmockedRequests Antwort für Anforderungen zurückgeben 502 Bad Gateway , die nicht simuliert werden false

Befehlszeilenoptionen

Name BESCHREIBUNG Standard
-n, --no-mocks Laden simulierter Anforderungen deaktivieren false
--mocks-file Pfad zur Datei, die simulierte Antworten enthält -

Simulierte Dateibeispiele

Nachfolgend sind Beispiele für Simulierte Objekte aufgeführt.

Antworten mit Textkörper

Antwort auf eine Anforderung mit einer 200 OK-Antwort und einem JSON-Textkörper.

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

Mit Fehler antworten

Antworten Sie auf eine Anforderung mit einer 404 Nicht gefundenen Antwort.

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

Antworten mit Binärdaten

Antworten Sie auf eine Anforderung mit einem binärimage, das von einer Datei auf dem Datenträger geladen wurde.

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

Antworten auf nth Anfrage

Antworten Sie erst nach dem zweiten Aufruf auf eine Anforderung.

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

Antworten, die mit dem Anforderungstext übereinstimmen

Antworten Sie auf eine Anforderung, die eine bestimmte Zeichenfolge im Text enthält.

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

Spiegelung von Anforderungsdaten als Antwort

Antworten Sie mit Daten, die Werte aus dem Anforderungstext mithilfe von @request.body.* Platzhaltern spiegeln.

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

Angesichts der folgenden Anforderung:

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

Die Antwort lautet:

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
}

Simuliert Dateieigenschaften

Eigentum BESCHREIBUNG Erforderlich
request Anforderungsobjekt , das die Anforderung definiert, auf die geantwortet werden soll ja
response Response-Objekt , das die Antwort definiert, die zurückgegeben werden soll ja

Anforderungsobjekt

Jede Anforderung verfügt über die folgenden Eigenschaften:

Eigentum BESCHREIBUNG Erforderlich Standardwert Beispielwert
url Absolute URL zu einem API-Endpunkt, auf den geantwortet werden soll ja https://jsonplaceholder.typicode.com/posts
method HTTP-Verb, das zum Abgleichen der Anforderung mit url nein GET GET
nth Legt fest, dass der Proxy erst nach dem Abfangen der Anforderung zum n-ten Zeitpunkt antworten soll. nein 2
bodyFragment Eine Zeichenfolge, die im Anforderungstext vorhanden sein soll nein foo

Bemerkungen

Verwenden Sie sternchen (*) in der url Eigenschaft, wenn Sie einer Reihe von Zeichen in der URL entsprechen möchten. Beispielsweise entspricht https://jsonplaceholder.typicode.com/*https://jsonplaceholder.typicode.com/posts und https://jsonplaceholder.typicode.com/comments. Zur Laufzeit konvertiert Dev Proxy jeden * in einen regulären Ausdruck .*.

Platzieren Sie beim Definieren von Mocks zuerst die spezifischesten Modelle. Wenn Sie beispielsweise zwei Modelle haben, eine für https://jsonplaceholder.typicode.com/posts und eine für https://jsonplaceholder.typicode.com/*, platzieren Sie das erste Modell zuerst. Andernfalls entspricht Dev Proxy dem zweiten Modell zuerst und gibt die Antwort für https://jsonplaceholder.typicode.com/* alle Anforderungen zurück.

Verwenden Sie die nth Eigenschaft, wenn Sie eine andere an dieselbe Anforderungs-URL senden müssen. Verwenden Sie sie beispielsweise, um einen lang andauernden Vorgang zu simulieren. Wenn Sie die API zum ersten Mal aufrufen, wird eine Antwort mit einer inprogress Nachricht zurückgegeben. Wenn Sie die API zum zweiten Mal aufrufen, wird eine Antwort mit der completed Nachricht zurückgegeben. Weitere Informationen zur nth Eigenschaft finden Sie unter Mock nth request.

Mithilfe der bodyFragment Eigenschaft können Sie Anforderungen basierend auf dem Textinhalt abgleichen. Wenn Sie beispielsweise Anforderungen abgleichen möchten, die die foo Zeichenfolge im Textkörper enthalten, legen Sie die bodyFragment Eigenschaft auf foo. Dev Proxy verwendet bodyFragment nur für andere Anforderungen als GET.

Antwortobjekt

Jede Antwort weist die folgenden Eigenschaften auf:

Eigentum BESCHREIBUNG Erforderlich Standardwert Beispielwert
body Textkörper, der als Antwort auf die Anforderung gesendet werden soll nein leer { "foo": "bar" }
statusCode Antwort-HTTP-Statuscode nein 200 404
headers Array von Kopfzeilen, die in die Antwort eingeschlossen werden sollen nein leer [{ name: "content-type", "value": "application/json" }]

Bemerkungen

Wenn Sie binäre Daten zurückgeben möchten, legen Sie die Eigenschaft auf einen Zeichenfolgenwert fest, der body mit @ dem Dateipfad relativ zur Mocks-Datei beginnt. Gibt beispielsweise @picture.jpg das in der picture.jpg Datei gespeicherte Bild im selben Verzeichnis wie die Mocks-Datei zurück.

Verwenden Sie @request.body.* Platzhalter im Antworttext, um Anforderungsdaten in der Antwort zu spiegeln. Gibt beispielsweise @request.body.displayName den Wert der displayName Eigenschaft aus dem Anforderungstext zurück. Dieses Feature funktioniert mit geschachtelten Objekten und Arrays, sodass Sie dynamische Antworten erstellen können, die die eingehenden Anforderungsdaten widerspiegeln. Der Platzhalterersatz unterstützt verschiedene JSON-Werttypen, einschließlich Zeichenfolgen, Zahlen, Booleans und komplexen Objekten.

Nächster Schritt