MockResponsePlugin (på engelska)

Simulerar svar.

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

Konfigurationsexempel

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "MockResponsePlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "mocksPlugin"
    }
  ],
  "mocksPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.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

Tip

Om du vill skapa en mocks-fil från filer med råa HTTP-svar använder du mocks from-http-responses kommandot .

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.

Fil: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.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.

Fil: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.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.

Fil: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.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 bara på den andra matchande begäran. Dev Proxy skickar andra begäranden till API:et.

Fil: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.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.

Fil: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.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.

Fil: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.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 Svara endast på den n:e avlyssnade begäran som matchar mockens method, urloch bodyFragment 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 .*.

Dev Proxy ignorerar skiftläge när egenskapen url matchas mot begärande-URL:en. Till exempel matchar en mock för https://jsonplaceholder.typicode.com/Posts en begäran till https://jsonplaceholder.typicode.com/posts. Om du definierar flera modeller för samma metod med URL:er som endast skiljer sig åt i höljet använder Dev Proxy den första matchande mocken.

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 ett annat svar 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 . Dev Proxy räknar varje avlyssnad begäran som matchar mocks method, url, och bodyFragment, oavsett om den returnerar ett falskt svar för den eller inte. Du behöver inte ett reservutfall för samma URL: Om inget hån gäller för en begäran skickar Dev Proxy den till API:et. 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 anger body egenskapen till ett JSON-objekt eller en matris serialiserar Dev Proxy den till JSON. Om du ställer in den på en sträng skickar Dev Proxy strängen as-is, utan omgivande citattecken. Använd en strängtext för att returnera oformaterad text, HTML, XML eller annat icke-JSON-innehåll. Eftersom Dev Proxy som standard content-type anger rubriken till application/json, anger du även rubriken så att den content-type matchar ditt innehåll, till exempel text/plain.

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