応答をシミュレートします。
プラグイン インスタンスの定義
{
"name": "MockResponsePlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "mocksPlugin"
}
構成の例
{
"mocksPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.schema.json",
"mocksFile": "mocks.json"
}
}
構成プロパティ
| プロパティ | 説明 | 既定値 |
|---|---|---|
mocksFile |
モック応答を含むファイルへのパス | mocks.json |
blockUnmockedRequests |
モックされていない要求 502 Bad Gateway 応答を返す |
false |
コマンドライン オプション
| 名前 | 説明 | 既定値 |
|---|---|---|
-n, --no-mocks |
モック要求の読み込みを無効にする | false |
--mocks-file |
モック応答を含むファイルへのパス | - |
モック ファイルの例
モック オブジェクトの例を次に示します。
本文で応答する
200 OK 応答と 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"
}
]
}
}
]
}
エラーで応答する
404 Not Found 応答で要求に応答します。
{
"$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
}
}
]
}
バイナリ データで応答する
ディスク上のファイルから読み込まれたバイナリ イメージを使用して要求に応答します。
{
"$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"
}
]
}
}
]
}
nth要求で応答する
2 回目に呼び出された後にのみ、要求に応答します。
{
"$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
}
}
}
]
}
要求本文に一致する応答
本文に特定の文字列を含む要求に応答します。
{
"$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..."
}
}
}
]
}
応答で要求データをミラー化する
@request.body.*プレースホルダーを使用して、要求本文の値を反映するデータで応答します。
{
"$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"
}
]
}
}
]
}
次の要求を指定します。
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"
}
応答は次のとおりです。
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
}
モック ファイルのプロパティ
| プロパティ | 説明 | 必須 |
|---|---|---|
request |
応答する要求を定義する要求オブジェクト | はい |
response |
返す応答 を定義する Response オブジェクト | はい |
Request オブジェクト
各要求には、次のプロパティがあります。
| プロパティ | 説明 | 必須 | 既定値 | サンプル値 |
|---|---|---|---|---|
url |
応答する API エンドポイントへの絶対 URL | はい | https://jsonplaceholder.typicode.com/posts |
|
method |
要求と一致するために使用される HTTP 動詞 url |
いいえ | GET |
GET |
nth |
n 回目の要求をインターセプトした後にのみプロキシが応答する必要があることを決定します | いいえ | 2 |
|
bodyFragment |
要求本文に存在する文字列 | いいえ | foo |
注釈
URL 内の任意の一連の文字と一致させる場合は、* プロパティでアスタリスク (url) を使用します。 たとえば、https://jsonplaceholder.typicode.com/* は https://jsonplaceholder.typicode.com/posts および https://jsonplaceholder.typicode.com/comments と一致します。 実行時に、開発プロキシは各 * を正規表現 .*に変換します。
モックを定義するときは、最も具体的なモックを最初に配置します。 たとえば、2 つのモック (1 つは https://jsonplaceholder.typicode.com/posts 用、1 つは https://jsonplaceholder.typicode.com/*用) がある場合は、最初のモックを最初に配置します。 それ以外の場合、開発プロキシは最初に 2 番目のモックと一致し、すべての要求に対する https://jsonplaceholder.typicode.com/* の応答を返します。
同じ要求 URL に別の要求を送信する必要がある場合は、 nth プロパティを使用します。 たとえば、実行時間の長い操作をシミュレートするために使用します。 API を初めて呼び出すと、 inprogress メッセージを含む応答が返されます。 2 回目に API を呼び出すと、 completed メッセージを含む応答が返されます。
nth プロパティの詳細については、「モック n 番目の要求」を参照してください。
bodyFragment プロパティを使用すると、本文の内容に基づいて要求を照合できます。 たとえば、本文に foo 文字列を含む要求を照合する場合は、 bodyFragment プロパティを foo に設定します。 開発プロキシは、bodyFragment以外の要求にのみGETを使用します。
Response オブジェクト
各応答には、次のプロパティがあります。
| プロパティ | 説明 | 必須 | 既定値 | サンプル値 |
|---|---|---|---|---|
body |
要求への応答として送信する本文 | いいえ | 空 | { "foo": "bar" } |
statusCode |
応答 HTTP 状態コード | いいえ | 200 |
404 |
headers |
応答に含めるヘッダーの配列 | いいえ | 空 | [{ name: "content-type", "value": "application/json" }] |
注釈
バイナリ データを返す場合は、 body プロパティを、 @ で始まる文字列値に設定し、その後にモック ファイルを基準にしたファイル パスを指定します。 たとえば、 @picture.jpg はモック ファイルと同じディレクトリ内の picture.jpg ファイルに格納されているイメージを返します。
応答の要求データをミラー化するには、応答本文 @request.body.* プレースホルダーを使用します。 たとえば、 @request.body.displayName は要求本文から displayName プロパティの値を返します。 この機能は、入れ子になったオブジェクトと配列で動作し、受信要求データを反映する動的応答を作成できます。 プレースホルダーの置換では、文字列、数値、ブール値、複合オブジェクトなど、さまざまな JSON 値型がサポートされています。
次のステップ
Dev Proxy