Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Simule les réponses.
Définition de l’instance de plug-in
{
"name": "MockResponsePlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "mocksPlugin"
}
Exemple de configuration
{
"mocksPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.schema.json",
"mocksFile": "mocks.json"
}
}
Propriétés de configuration
| Propriété | Descriptif | Par défaut |
|---|---|---|
mocksFile |
Chemin d’accès au fichier contenant des réponses fictives | mocks.json |
blockUnmockedRequests |
Retourner 502 Bad Gateway une réponse pour les requêtes qui ne sont pas simulées |
false |
Options de ligne de commande
| Nom | Descriptif | Par défaut |
|---|---|---|
-n, --no-mocks |
Désactiver le chargement des demandes fictives | false |
--mocks-file |
Chemin d’accès au fichier contenant des réponses fictives | - |
Exemples de fichiers fictifs
Voici des exemples d’objets fictifs.
Répondre avec le corps
Réponse à une demande avec une réponse 200 OK et un corps 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"
}
]
}
}
]
}
Répondre avec une erreur
Répondre à une demande avec une réponse 404 introuvable.
{
"$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
}
}
]
}
Répondre avec des données binaires
Répondez à une demande avec une image binaire chargée à partir d’un fichier sur le disque.
{
"$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"
}
]
}
}
]
}
Répondre à la nth demande
Répondez à une demande uniquement après la deuxième fois qu’elle est appelée.
{
"$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
}
}
}
]
}
Répondre en correspondance avec le corps de la demande
Répondez à une demande qui contient une chaîne spécifique dans le corps.
{
"$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..."
}
}
}
]
}
Données de requête miroir en réponse
Répondez avec des données qui reflètent les valeurs du corps de la requête à l’aide @request.body.* d’espaces réservés.
{
"$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"
}
]
}
}
]
}
Compte tenu de la demande suivante :
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 réponse est la suivante :
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
}
Propriétés de fichier fictifs
| Propriété | Descriptif | Obligatoire |
|---|---|---|
request |
Objet de requête qui définit la demande à répondre à | oui |
response |
Objet response qui définit la réponse à retourner | oui |
Objet de Requête
Chaque requête a les propriétés suivantes :
| Propriété | Descriptif | Obligatoire | Valeur par défaut | Valeur d'échantillon |
|---|---|---|---|---|
url |
URL absolue vers un point de terminaison d’API à répondre à | oui | https://jsonplaceholder.typicode.com/posts |
|
method |
Verbe HTTP utilisé pour faire correspondre la requête avec url |
Non | GET |
GET |
nth |
Détermine que le proxy doit répondre uniquement après l’interception de la demande pour la nième fois | Non | 2 |
|
bodyFragment |
Chaîne qui doit être présente dans le corps de la requête | Non | foo |
Remarques
Utilisez un astérisque (*) dans la url propriété si vous souhaitez correspondre à une série de caractères dans l’URL. Par exemple, https://jsonplaceholder.typicode.com/* correspond à https://jsonplaceholder.typicode.com/posts et https://jsonplaceholder.typicode.com/comments. Lors de l’exécution, le proxy de développement convertit chacun * en expression .*régulière.
Lors de la définition de fictives, placez d’abord les fictives les plus spécifiques. Par exemple, si vous avez deux maquettes, une pour https://jsonplaceholder.typicode.com/posts et une pour https://jsonplaceholder.typicode.com/*, placez la première maquette en premier. Sinon, le proxy de développement correspond au deuxième fictive en premier et retourne la réponse pour https://jsonplaceholder.typicode.com/* toutes les requêtes.
Utilisez la nth propriété si vous devez envoyer une autre URL de requête. Par exemple, utilisez-le pour simuler une opération de longue durée. La première fois que vous appelez l’API, elle retourne une réponse avec un inprogress message. La deuxième fois que vous appelez l’API, elle retourne une réponse avec le completed message. Pour plus d’informations sur la nth propriété, consultez la requête Mock nth.
À l’aide de la bodyFragment propriété, vous pouvez faire correspondre les demandes en fonction du contenu du corps. Par exemple, si vous souhaitez faire correspondre les requêtes qui contiennent la foo chaîne dans le corps, définissez la bodyFragment propriété foosur . Le proxy de développement utilise bodyFragment uniquement les requêtes autres que GET.
Objet Response
Chaque réponse a les propriétés suivantes :
| Propriété | Descriptif | Obligatoire | Valeur par défaut | Valeur d'échantillon |
|---|---|---|---|---|
body |
Corps à envoyer en tant que réponse à la demande | Non | vide | { "foo": "bar" } |
statusCode |
Code d’état HTTP de réponse | Non | 200 |
404 |
headers |
Tableau d’en-têtes à inclure dans la réponse | Non | vide | [{ name: "content-type", "value": "application/json" }] |
Remarques
Si vous souhaitez retourner des données binaires, définissez la body propriété sur une valeur de chaîne commençant @ par le chemin d’accès du fichier par rapport au fichier fictif. Par exemple, @picture.jpg retourne l’image stockée dans le picture.jpg fichier dans le même répertoire que le fichier fictif.
Pour mettre en miroir les données de requête dans la réponse, utilisez @request.body.* des espaces réservés dans le corps de la réponse. Par exemple, @request.body.displayName retourne la valeur de la displayName propriété à partir du corps de la requête. Cette fonctionnalité fonctionne avec les objets et tableaux imbriqués, ce qui vous permet de créer des réponses dynamiques qui reflètent les données de requête entrantes. Le remplacement de l’espace réservé prend en charge différents types de valeurs JSON, notamment les chaînes, les nombres, les booléens et les objets complexes.