Dela via


MockResponsePlugin (på engelska)

Simulerar svar.

Skärmbild av en kommandotolk där Dev Proxy simulerar svar för en begäran till GitHub API.

Definition av plugin-instans

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

Konfigurationsexempel

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

Konfigurationsegenskaper

Fastighet Beskrivning Förinställning
mocksFile Sökväg till filen som innehåller falska svar mocks.json
blockUnmockedRequests Returnera 502 Bad Gateway svar för begäranden som inte hånas false

Kommandoradsalternativ

Namn Beskrivning Förinställning
-n, --no-mocks Inaktivera inläsning av mock-begäranden false
--mocks-file Sökväg till filen som innehåller falska svar -

Simulerar filexempel

Här följer exempel på falska objekt.

Svara med brödtext

Svar på en begäran med ett 200 OK-svar och en JSON-brödtext.

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

Svara med fel

Svara på en begäran med svaret 404 Hittades inte.

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

Svara med binära data

Svara på en begäran med en binär avbildning som läses in från en fil på disken.

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

Svara på nth begäran

Svara på en begäran först efter den andra gången den anropas.

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

Svara som matchar begärandetexten

Svara på en begäran som innehåller en specifik sträng i brödtexten.

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

Speglingsbegärandedata som svar

Svara med data som speglar värden från begärandetexten med hjälp av @request.body.* platshållare.

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

Med följande begäran:

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

Svaret är:

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
}

Simulerar filegenskaper

Fastighet Beskrivning Krävs
request Begär objekt som definierar begäran att svara på Ja
response Svarsobjekt som definierar svaret för att returnera Ja

Begär objekt

Varje begäran har följande egenskaper:

Fastighet Beskrivning Krävs Standardvärde Exempelvärde
url Absolut URL till en API-slutpunkt att svara på Ja https://jsonplaceholder.typicode.com/posts
method HTTP-verb som används för att matcha begäran med url Nej GET GET
nth Avgör att proxyn endast ska svara efter när begäran fångas upp för den n:e gången Nej 2
bodyFragment En sträng som ska finnas i begärandetexten Nej foo

Anmärkningar

Använd asterisk (*) i egenskapen url om du vill matcha en serie tecken i URL:en. Till exempel matchar https://jsonplaceholder.typicode.com/*https://jsonplaceholder.typicode.com/posts och https://jsonplaceholder.typicode.com/comments. Vid körning konverterar Dev Proxy var och * en till ett reguljärt uttryck .*.

När du definierar hån placerar du de mest specifika hånen först. Om du till exempel har två mocks, en för https://jsonplaceholder.typicode.com/posts och en för https://jsonplaceholder.typicode.com/*, placerar du det första hånet först. Annars matchar Dev Proxy det andra hånet först och returnerar svaret för https://jsonplaceholder.typicode.com/* alla begäranden.

Använd egenskapen nth om du behöver skicka en annan till samma begärande-URL. Använd den till exempel för att simulera en tidskrävande åtgärd. Första gången du anropar API:et returneras ett svar med ett inprogress meddelande. Andra gången du anropar API:et returneras ett svar med meddelandet completed . Mer information om egenskapen finns i nthMock nth request (Mock nth request).

Med hjälp av bodyFragment egenskapen kan du matcha begäranden baserat på brödtextinnehållet. Om du till exempel vill matcha begäranden som innehåller strängen foo i brödtexten anger du bodyFragment egenskapen till foo. Dev Proxy använder bodyFragment endast för andra begäranden än GET.

Svarsobjekt

Varje svar har följande egenskaper:

Fastighet Beskrivning Krävs Standardvärde Exempelvärde
body Brödtext som ska skickas som svar på begäran Nej tom { "foo": "bar" }
statusCode Http-statuskod för svar Nej 200 404
headers Matris med rubriker som ska inkluderas i svaret Nej tom [{ name: "content-type", "value": "application/json" }]

Anmärkningar

Om du vill returnera binära data anger body du egenskapen till ett strängvärde som börjar med @ följt av filsökvägen i förhållande till mocks-filen. Returnerar till exempel @picture.jpg avbildningen picture.jpg som lagras i filen i samma katalog som mocks-filen.

Om du vill spegla begärandedata i svaret använder du @request.body.* platshållare i svarstexten. Returnerar @request.body.displayName till exempel värdet för displayName egenskapen från begärandetexten. Den här funktionen fungerar med kapslade objekt och matriser, så att du kan skapa dynamiska svar som återspeglar inkommande begärandedata. Platshållarbytet stöder olika JSON-värdetyper, inklusive strängar, tal, booleska objekt och komplexa objekt.

Nästa steg