Aracılığıyla paylaş


MockResponsePlugin

Yanıtların simülasyonunu oluşturur.

GitHub API'sine yönelik bir istek için yanıt simülasyonu yapılan Dev Proxy ile komut isteminin ekran görüntüsü.

Eklenti örneği tanımı

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

Yapılandırma örneği

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

Yapılandırma özellikleri

Mülkiyet Açıklama Varsayılan
mocksFile Sahte yanıtlar içeren dosyanın yolu mocks.json
blockUnmockedRequests Sahte olmayan istekler için yanıt döndürme 502 Bad Gateway false

Komut satırı seçenekleri

İsim Açıklama Varsayılan
-n, --no-mocks Sahte istekleri yüklemeyi devre dışı bırakma false
--mocks-file Sahte yanıtlar içeren dosyanın yolu -

Sahte dosya örnekleri

Aşağıda sahte nesnelere örnekler verilmiştir.

Gövdeyle yanıt verme

200 Tamam yanıtı ve JSON gövdesi ile bir isteğe yanıt.

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

Hatayla yanıt verme

404 Bulunamadı yanıtıyla bir isteği yanıtlar.

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

İkili verilerle yanıt verme

Disk üzerindeki bir dosyadan yüklenen ikili görüntüyle bir isteğe yanıt verin.

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

İstek üzerine nth yanıt verme

bir isteği yalnızca ikinci kez çağrıldıktan sonra yanıtlayın.

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

İstek gövdesiyle eşleşen yanıt

Gövdede belirli bir dize içeren bir isteği yanıtlar.

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

Yanıt olarak istek verilerini yansıtma

Yer tutucuları kullanarak @request.body.* istek gövdesindeki değerleri yansıtan verilerle yanıt verin.

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

Aşağıdaki istek göz önünde bulundurulduğunda:

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

Yanıt:

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
}

Sahte dosya özellikleri

Mülkiyet Açıklama Gerekli
request Yanıt verme isteğini tanımlayan request nesnesi evet
response Döndürülecek yanıtı tanımlayan yanıt nesnesi evet

İstek nesnesi

Her istek aşağıdaki özelliklere sahiptir:

Mülkiyet Açıklama Gerekli Varsayılan değer Örnek değer
url Yanıt vermek için api uç noktasının mutlak URL'si evet https://jsonplaceholder.typicode.com/posts
method İsteği ile eşleştirmek için kullanılan HTTP fiili url Hayır GET GET
nth Proxy'nin yalnızca isteğin n. kez araya girilmesinden sonra yanıt vermesi gerektiğini belirler Hayır 2
bodyFragment İstek gövdesinde bulunması gereken bir dize Hayır foo

Açıklamalar

URL'deki herhangi bir karakter serisini * eşleştirmek istiyorsanız özelliğinde yıldız işareti (url) kullanın. Örneğin, https://jsonplaceholder.typicode.com/* ve https://jsonplaceholder.typicode.com/postsile eşleşirhttps://jsonplaceholder.typicode.com/comments. Çalışma zamanında Dev Proxy her * biri normal ifadeye .*dönüştürür.

Sahteleri tanımlarken, önce en özel sahteleri yerleştirin. Örneğin, biri için ve biri için https://jsonplaceholder.typicode.com/postshttps://jsonplaceholder.typicode.com/*olmak üzere iki sahte modeliniz varsa ilk sahteyi önce yerleştirin. Aksi takdirde, Dev Proxy ilk olarak ikinci sahte ile eşleşir ve tüm istekler için https://jsonplaceholder.typicode.com/* yanıtı döndürür.

Aynı istek URL'sine nth farklı bir göndermeniz gerekiyorsa özelliğini kullanın. Örneğin, uzun süre çalışan bir işlemin benzetimini yapmak için bunu kullanın. API'yi ilk kez çağırdığınızda, ileti içeren bir inprogress yanıt döndürür. API'yi ikinci kez çağırdığınızda, iletiyle completed birlikte bir yanıt döndürür. Özelliği hakkında nth daha fazla bilgi için bkz . Sahte n. istek.

bodyFragment özelliğini kullanarak, istekleri gövde içeriğine göre eşleştirebilirsiniz. Örneğin, gövdesindeki dizeyi foo içeren istekleri eşleştirmek istiyorsanız özelliğini olarak bodyFragmentayarlayınfoo. Geliştirme Proxy'si yalnızca dışındaki bodyFragmentistekler için kullanırGET.

Yanıt nesnesi

Her yanıt aşağıdaki özelliklere sahiptir:

Mülkiyet Açıklama Gerekli Varsayılan değer Örnek değer
body İsteğin yanıtı olarak gönderilecek gövde Hayır boş { "foo": "bar" }
statusCode Yanıt HTTP durum kodu Hayır 200 404
headers Yanıta eklenecek üst bilgi dizisi Hayır boş [{ name: "content-type", "value": "application/json" }]

Açıklamalar

İkili veri döndürmek istiyorsanız, özelliğini sahte dosyaya göre dosya yolu ile body başlayan bir dize değeri olarak ayarlayın@. Örneğin, @picture.jpg sahte dosyayla picture.jpg aynı dizinde dosyada depolanan görüntüyü döndürür.

Yanıttaki istek verilerini yansıtmak için yanıt gövdesindeki yer tutucuları kullanın @request.body.* . Örneğin, @request.body.displayName istek gövdesinden özelliğinin değerini displayName döndürür. Bu özellik, iç içe nesneler ve dizilerle çalışır ve gelen istek verilerini yansıtan dinamik yanıtlar oluşturmanıza olanak sağlar. Yer tutucu değişimi dizeler, sayılar, boole'lar ve karmaşık nesneler gibi çeşitli JSON değer türlerini destekler.

Sonraki adım