Menggunakan file .http di Visual Studio 2022
Editor file Visual Studio 2022 .http
menyediakan cara mudah untuk menguji proyek ASP.NET Core, terutama aplikasi API. Editor menyediakan UI yang:
- Membuat dan memperbarui
.http
file. - Mengirim permintaan HTTP yang ditentukan dalam
.http
file. - Menampilkan respons.
Artikel ini berisi dokumentasi untuk:
.http
Sintaks file.- Cara membuat
.http
file. - Cara mengirim permintaan dari
.http
file. - Tempat menemukan
.http
opsi file yang dapat dikonfigurasi.. - Cara membuat permintaan dalam
.http
file dengan menggunakan Penjelajah Titik Akhir Visual Studio 2022.
.http
Format file dan editor terinspirasi oleh ekstensi Klien Visual Studio CodeREST. Editor Visual Studio 2022 .http
mengenali .rest
sebagai ekstensi file alternatif untuk format file yang sama.
Prasyarat
- Visual Studio 2022 versi 17.8 atau yang lebih baru dengan beban kerja ASP.NET dan pengembangan web terinstal.
.http
sintaks file
Bagian berikut menjelaskan .http
sintaks file.
Permintaan
Format untuk permintaan HTTP adalah HTTPMethod URL HTTPVersion
, semua pada satu baris, di mana:
HTTPMethod
adalah metode HTTP untuk digunakan, misalnya:URL
adalah URL untuk mengirim permintaan. URL dapat menyertakan parameter string kueri. URL tidak harus menunjuk ke proyek web lokal. Ini dapat menunjuk ke URL apa pun yang dapat diakses Visual Studio.HTTPVersion
bersifat opsional dan menentukan versi HTTP yang harus digunakan, yaitu, ,HTTP/1.1
HTTP/2
, atauHTTP/3
.
File dapat berisi beberapa permintaan dengan menggunakan baris dengan ###
sebagai pemisah. Contoh berikut menunjukkan tiga permintaan dalam file yang mengilustrasikan sintaks ini:
GET https://localhost:7220/weatherforecast
###
GET https://localhost:7220/weatherforecast?date=2023-05-11&location=98006
###
GET https://localhost:7220/weatherforecast HTTP/3
###
Header permintaan
Untuk menambahkan satu atau beberapa header, tambahkan setiap header pada barisnya sendiri segera setelah baris permintaan. Jangan sertakan baris kosong antara baris permintaan dan header pertama atau di antara baris header berikutnya. Formatnya adalah HeaderName: Value
, seperti yang ditunjukkan dalam contoh berikut:
GET https://localhost:7220/weatherforecast
Date: Wed, 27 Apr 2023 07:28:00 GMT
###
GET https://localhost:7220/weatherforecast
Cache-Control: max-age=604800
Age: 100
###
Penting
Saat memanggil API yang mengautentikasi dengan header, jangan terapkan rahasia apa pun ke repositori kode sumber. Lihat metode yang didukung untuk menyimpan rahasia nanti di artikel ini, seperti rahasia pengguna ASP.NET Core, Azure Key Vault, dan enkripsi DPAPI.
Isi permintaan
Tambahkan isi permintaan setelah baris kosong, seperti yang ditunjukkan dalam contoh berikut:
POST https://localhost:7220/weatherforecast
Content-Type: application/json
Accept-Language: en-US,en;q=0.5
{
"date": "2023-05-10",
"temperatureC": 30,
"summary": "Warm"
}
###
Komentar
Baris yang dimulai dengan atau #
//
adalah komentar. Baris ini diabaikan saat Visual Studio mengirim permintaan HTTP.
Variabel
Baris yang dimulai dengan @
mendefinisikan variabel dengan menggunakan sintaks @VariableName=Value
.
Variabel dapat dirujuk dalam permintaan yang ditentukan nanti dalam file. Mereka dirujuk dengan membungkus namanya dalam kurung kurawal ganda, {{
dan }}
. Contoh berikut menunjukkan dua variabel yang ditentukan dan digunakan dalam permintaan:
@hostname=localhost
@port=44320
GET https://{{hostname}}:{{port}}/weatherforecast
Variabel dapat didefinisikan menggunakan nilai variabel lain yang ditentukan sebelumnya dalam file. Contoh berikut menggunakan satu variabel dalam permintaan alih-alih keduanya ditampilkan dalam contoh sebelumnya:
@hostname=localhost
@port=44320
@host={{hostname}}:{{port}}
GET https://{{host}}/api/search/tool
File lingkungan
Untuk memberikan variabel nilai yang berbeda di lingkungan yang berbeda, buat file bernama http-client.env.json
. Temukan file dalam direktori yang sama dengan .http
file atau di salah satu direktori induknya. Berikut adalah contoh file lingkungan:
{
"dev": {
"HostAddress": "https://localhost:44320"
},
"remote": {
"HostAddress": "https://contoso.com"
}
}
File lingkungan adalah file JSON yang berisi satu atau beberapa lingkungan bernama, seperti "dev" dan "remote" dalam contoh sebelumnya. Setiap lingkungan bernama berisi satu atau beberapa variabel, seperti HostAddress
dalam contoh sebelumnya. Variabel dari file lingkungan dirujuk dengan cara yang sama seperti variabel lain, seperti yang ditunjukkan dalam contoh berikut:
GET {{HostAddress}}/api/search/tool
Nilai yang digunakan untuk variabel saat mengirim permintaan ditentukan oleh dropdown pemilih lingkungan di sudut .http
kanan atas editor file. Cuplikan layar berikut menunjukkan pemilih:
File lingkungan tidak harus berada di folder proyek. Visual Studio mencari file lingkungan di folder tempat .http
file berada. Jika tidak ada di folder tersebut, Visual Studio akan melihat direktori induk untuk menemukannya. Ketika file bernama http-client.env.json
ditemukan, pencarian berakhir. File yang ditemukan terdekat dengan .http
file digunakan.
Setelah membuat atau mengedit .http
file, Anda mungkin harus menutup dan membuka kembali proyek untuk melihat perubahan yang tercermin dalam pemilih lingkungan. Tekan F6 untuk memilih pemilih lingkungan.
Visual Studio menampilkan peringatan dalam situasi berikut:
- File
.http
mereferensikan variabel yang tidak ditentukan dalam.http
file atau dalam file lingkungan. - File lingkungan berisi variabel yang tidak dirujuk dalam
.http
file.
Variabel yang ditentukan dalam file lingkungan dapat sama dengan yang didefinisikan dalam .http
file, atau bisa berbeda. Jika variabel didefinisikan dalam .http
file dan file lingkungan, nilai dalam .http
file akan mengambil alih nilai dalam file lingkungan.
File lingkungan khusus pengguna
Nilai khusus pengguna adalah nilai apa pun yang ingin diuji oleh pengembang individu tetapi tidak ingin berbagi dengan tim. http-client.env.json
Karena file dicek masuk ke kontrol sumber secara default, file tidak akan sesuai untuk menambahkan nilai khusus pengguna ke file ini. Sebagai gantinya, letakkan dalam file bernama http-client.env.json.user
yang terletak di folder yang sama dengan http-client.env.json
file. File yang diakhir dengan .user
harus dikecualikan dari kontrol sumber secara default saat menggunakan fitur kontrol sumber Visual Studio.
http-client.env.json
Saat file dimuat, Visual Studio mencari file saudarahttp-client.env.json.user
. Jika variabel didefinisikan dalam lingkungan dalam http-client.env.json
file dan http-client.env.json.user
file, nilai dalam http-client.env.json.user
file akan menang.
Berikut adalah contoh skenario yang menunjukkan cara kerja file lingkungan khusus pengguna. Misalkan .http
file memiliki konten berikut:
GET {{HostAddress}}/{{Path}}
Accept: application/json
Dan misalkan http-client.env.json
file berisi konten berikut:
{
"dev": {
"HostAddress": "https://localhost:7128",
"Path": "/weatherforecast"
},
"remote": {
"HostAddress": "https://contoso.com",
"Path": "/weatherforecast"
}
}
Dan misalkan ada file lingkungan khusus pengguna yang berisi konten berikut:
{
"dev": {
"Path": "/swagger/index.html"
}
}
Saat pengguna memilih lingkungan "dev", permintaan dikirim ke https://localhost:7128/swagger/index.html
karena nilai dalam http-client.env.json.user
file mengambil alih nilai dari http-client.env.json
Path
file.
Dengan file lingkungan yang sama, misalkan variabel ditentukan dalam .http
file:
@HostAddress=https://contoso.com
@Path=/weatherforecast
GET {{HostAddress}}/{{Path}}
Accept: application/json
Dalam skenario ini, permintaan lingkungan "dev" dikirim ke https://contoso.com/weatherforecast
karena definisi variabel dalam .http
file mengambil alih definisi file lingkungan.
ASP.NET Rahasia pengguna Core
Untuk mendapatkan nilai dari rahasia pengguna, gunakan file lingkungan yang terletak di folder yang sama dengan proyek ASP.NET Core. Dalam file lingkungan, tentukan variabel yang memiliki provider
properti dan secretName
. Atur nilai ke provider
AspnetUserSecrets
dan atur secretName
ke nama rahasia pengguna yang diinginkan. Misalnya, file lingkungan berikut menentukan variabel bernama ApiKeyDev
yang mendapatkan nilainya dari config:ApiKeyDev
rahasia pengguna:
{
"dev": {
"ApiKeyDev": {
"provider": "AspnetUserSecrets",
"secretName": "config:ApiKeyDev"
}
}
}
Untuk menggunakan variabel ini dalam .http
file, referensikan seperti variabel standar. Contohnya:
GET {{HostAddress}}{{Path}}
X-API-KEY: {{ApiKeyDev}}
Saat permintaan dikirim, nilai ApiKeyDev
rahasia berada di header X-API-KEY.
Saat Anda mengetik dalam http
file, editor menunjukkan daftar penyelesaian untuk nama variabel tetapi tidak menunjukkan nilainya.
Azure Key Vault
Azure Key Vault adalah salah satu dari beberapa solusi manajemen utama di Azure yang dapat digunakan untuk manajemen rahasia. Dari tiga penyimpanan rahasia yang saat ini didukung untuk .http
file, Key Vault adalah pilihan terbaik untuk berbagi rahasia di berbagai pengguna. Dua opsi lainnya—ASP.NET Rahasia Pengguna dan enkripsi DPAPI—tidak mudah dibagikan.
Untuk menggunakan nilai dari Azure Key Vault, Anda harus masuk ke Visual Studio dengan akun yang memiliki akses ke Key Vault yang diinginkan.
Tentukan variabel dalam file lingkungan dengan metadata untuk mengakses rahasia. Variabel dinamai AKVSecret
dalam contoh berikut:
{
"dev": {
"AKVSecret": {
"provider": "AzureKeyVault",
"secretName": "SecretInKeyVault",
"resourceId": "/subscriptions/3a914c59-8175a9e0e540/resourceGroups/my-key-vault-rg/providers/Microsoft.KeyVault/vaults/my-key-vault-01182024"
}
}
}
Variabel AKVSecret
menarik nilainya dari Azure Key Vault. Properti berikut didefinisikan pada AKVSecret
:
Nama | Deskripsi |
---|---|
penyedia | Untuk Key Vault, selalu gunakan AzureKeyVault . |
secretName | Nama rahasia yang akan diekstrak. |
resourceId | ID sumber daya Azure untuk akses Key Vault tertentu. |
Nilai untuk resourceId
properti dapat ditemukan di portal Azure. Buka Properti Pengaturan > untuk menemukannya. Untuk secretName
, gunakan nama rahasia yang muncul di halaman Rahasia di portal Azure.
Misalnya, file berikut .http
memiliki permintaan yang menggunakan nilai rahasia ini.
GET {{HostAddress}}{{Path}}
X-AKV-SECRET: {{akvSecret}}
Enkripsi DPAPI
Di Windows, ada API Perlindungan Data (DPAPI) yang dapat digunakan untuk mengenkripsi data sensitif. Ketika DPAPI digunakan untuk mengenkripsi data, nilai terenkripsi selalu spesifik untuk komputer, dan nilai tersebut juga khusus pengguna dalam .http
file. Nilai-nilai ini tidak dapat dibagikan dengan pengguna lain.
Untuk mengenkripsi nilai, gunakan aplikasi konsol berikut:
using System.Security.Cryptography;
using System.Text;
string stringToEncrypt = "Hello, World!";
byte[] encBytes = ProtectedData.Protect(Encoding.Unicode.GetBytes(stringToEncrypt), optionalEntropy: null, scope: DataProtectionScope.CurrentUser);
string base64 = Convert.ToBase64String(encBytes);
Console.WriteLine(base64);
Aplikasi konsol sebelumnya mereferensikan paket System.Security.Cryptography.ProtectedData NuGet. Untuk mengaktifkan nilai terenkripsi agar berfungsi dalam .http
file, enkripsi dengan cakupan yang diatur ke DataProtectionScope.CurrentUser. Nilai terenkripsi adalah string berkode base64 yang dapat disalin dan ditempelkan ke dalam file lingkungan.
Dalam file lingkungan, buat variabel yang memiliki provider
properti dan value
. Atur provider
ke Encrypted
, dan atur value
ke nilai terenkripsi. Misalnya, file lingkungan berikut menentukan variabel bernama dpapiValue
yang mendapatkan nilainya dari string yang dienkripsi dengan DPAPI.
{
"dev": {
"dpapiValue": {
"provider": "Encrypted",
"value": "AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA5qwfg4+Bhk2nsy6ujgg3GAAAAAACAAAAAAAQZgAAAAEAACAAAAAqNXhXc098k1TtKmaI4cUAbJVALMVP1zOR7mhC1RBJegAAAAAOgAAAAAIAACAAAABKu4E9WC/zX5LYZZhOS2pukxMTF9R4yS+XA9HoYF98GzAAAAAzFXatt461ZnVeUWgOV8M/DkqNviWUUjexAXOF/JfpJMw/CdsizQyESus2QjsCtZlAAAAAL7ns3u9mEk6wSMIn+KNsW/vdAw51OaI+HPVrt5vFvXRilTtvGbU/JnxsoIHj0Z7OOxlwOSg1Qdn60zEqmlFJBg=="
}
}
}
Dengan file lingkungan sebelumnya, dpapiValue
dapat digunakan dalam .http
file seperti variabel lainnya. Contohnya:
GET {{HostAddress}}{{Path}}
X-DPAPI-Secret: {{dpapiSecret}}
Ketika permintaan ini dikirim, X-DPAPI-Secret memiliki nilai rahasia yang didekripsi.
Variabel lingkungan
Untuk mendapatkan nilai variabel lingkungan, gunakan $processEnv
. Contoh berikut menempatkan nilai variabel lingkungan USERNAME di header X-UserName.
GET {{HostAddress}}{{Path}}
X-UserName: {{$processEnv USERNAME}}
Jika Anda mencoba menggunakan $processEnv
untuk mengakses variabel lingkungan yang tidak ada, .http
editor file akan menampilkan pesan kesalahan.
.env
File
Untuk mendapatkan nilai variabel yang ditentukan dalam .env
file, gunakan $dotenv
. File .env
harus berada di folder proyek. Format untuk $dotenv
sama dengan untuk $processEnv
. Misalnya, jika .env
file memiliki konten ini:
USERNAME=userFromDotenv
.http
Dan file memiliki konten ini:
GET {{HostAddress}}{{Path}}
X-UserName: {{$dotEnv USERNAME}}
Header X-UserName
akan memiliki "userFromDotenv".
Ketika $dotenv
dimasukkan di editor, itu menunjukkan penyelesaian untuk variabel yang ditentukan dalam .env
file.
Catatan
.env
file mungkin tidak dikecualikan dari kontrol sumber secara default, jadi berhati-hatilah untuk menghindari pemeriksaan dalam nilai rahasia apa pun.
Bilangan bulat acak
Untuk menghasilkan bilangan bulat acak, gunakan $randomInt
. Sintaksnya adalah {{$randomInt [min max]}}
tempat min
nilai dan max
bersifat opsional.
Tanggal dan waktu
$datetime
datetime
menghasilkan string dalam UTC. Sintaksnya adalah{{$datetime [format] [offset option]}}
tempat opsi format dan offset bersifat opsional.$localDatetime
datetime
menghasilkan string di zona waktu lokal. Sintaksnya adalah{{$localDatetime [format] [offset option]}}
tempat opsi format dan offset bersifat opsional.$timeStamp
timestamp
menghasilkan dalam UTC. adalahtimestamp
jumlah detik sejak Unix Epoch dalam waktu UTC. Sintaksnya adalah{{$timestamp [offset option]}}
tempat opsi offset bersifat opsional.
Opsinya [format]
adalah salah satu dari rfc1123
, iso8601
, atau format kustom dalam tanda kutip. Contohnya:
GET https://httpbin.org/headers
X-CUSTOM: {{$datetime "dd-MM-yyyy"}}
X-ISO8601: {{$datetime iso8601}}
X-ISO8601L: {{$localDatetime iso8601}}
X-RFC1123: {{$datetime rfc1123}}
X-RFC1123L: {{$localDatetime rfc1123}}
Berikut adalah beberapa nilai sampel yang dihasilkan contoh sebelumnya:
{
"headers": {
"X-Custom": "17-01-2024",
"X-Iso8601": "2024-01-17T22:59:55.5345770+00:00",
"X-Iso8601L": "2024-01-17T14:59:55.5345770-08:00",
"X-Rfc1123": "Wed, 17 Jan 2024 22:59:55 GMT",
"X-Rfc1123L": "Wed, 17 Jan 2024 14:59:55 -08"
}
}
Sintaksnya [offset option]
adalah dalam bentuk number
unit
di mana number
adalah bilangan bulat dan unit
merupakan salah satu nilai berikut:
unit |
Penjelasan |
---|---|
ms |
Milidetik |
s |
Detik |
m |
Menit |
h |
Jam |
d |
Hari |
w |
Minggu |
M |
Bulan |
y |
Tahun |
Contohnya:
GET https://httpbin.org/headers
X-Custom-Minus-1-Year: {{$datetime "dd-MM-yyyy" -1 y}}
X-RFC1123-Plus-1-Day: {{$datetime rfc1123 1 d}}
X-Timestamp-Plus-1-Year: {{$timestamp 1 y}}
Berikut adalah beberapa nilai sampel yang dihasilkan contoh sebelumnya:
{
"headers": {
"X-Custom-Minus-1-Year": "17-01-2023",
"X-Rfc1123-Plus-1-Day": "Thu, 18 Jan 2024 23:02:48 GMT",
"X-Timestamp-Plus-1-Year": "1737154968"
}
}
Beberapa contoh sebelumnya menggunakan situs web <sumber terbuka gratis httpbin.org>. Ini adalah situs web pihak ketiga yang tidak berafiliasi dengan Microsoft. Dalam contoh ini, ia mengembalikan isi respons dengan header yang dikirim dalam permintaan. Untuk informasi tentang cara lain menggunakan sumber daya ini untuk pengujian API, lihat halaman situs home httpbin.org.
Sintaksis yang tidak didukung
Editor file Visual Studio 2022 .http
tidak memiliki semua fitur yang dimiliki ekstensi Klien Visual Studio CodeREST. Daftar berikut ini mencakup beberapa fitur yang lebih signifikan yang hanya tersedia di ekstensi Visual Studio Code:
- Baris permintaan yang mencakup lebih dari satu baris
- Permintaan bernama
- Tentukan jalur file sebagai isi permintaan
- Format campuran untuk isi saat menggunakan multipart/form-data
- Permintaan GraphQL
- Permintaan cURL
- Salin/tempel sebagai cURL
- Riwayat permintaan
- Simpan isi respons ke file
- Autentikasi berbasis sertifikat
- Variabel perintah
- Menyesuaikan pratinjau respons
- Pengaturan per permintaan
Membuat .http
file
Di Penjelajah Solusi, klik kanan proyek ASP.NET Core.
Di menu konteks, pilih Tambahkan>Item Baru.
Dalam dialog Tambahkan Item Baru, pilih ASP.NET Core>General.
Pilih File HTTP, dan pilih Tambahkan.
Kirim permintaan HTTP
Tambahkan setidaknya satu permintaan ke
.http
file dan simpan file.Jika URL permintaan menunjuk ke localhost dan port proyek, jalankan proyek sebelum mencoba mengirim permintaan ke dalamnya.
Send Request
Pilih tautan atauDebug
yang berada tepat di atas permintaan yang akan dikirim.Permintaan dikirim ke URL yang ditentukan, dan respons muncul di panel terpisah di sebelah kanan jendela editor.
.http
opsi file
Beberapa aspek .http
perilaku file dapat dikonfigurasi. Untuk melihat apa yang tersedia, buka EditorRest> Teks Opsi>Alat.> Misalnya, pengaturan batas waktu dapat dikonfigurasi pada tab Tingkat Lanjut . Berikut adalah cuplikan layar dialog Opsi :
Menggunakan Penjelajah Titik Akhir
Endpoints Explorer adalah jendela alat yang menampilkan semua titik akhir yang ditentukan API web. Alat ini memungkinkan Anda mengirim permintaan ke titik akhir dengan menggunakan .http
file.
Kumpulan awal titik akhir yang ditampilkan Endpoints Explorer ditemukan secara statis. Ada beberapa titik akhir yang tidak dapat ditemukan secara statis. Misalnya, titik akhir yang ditentukan dalam proyek pustaka kelas tidak dapat ditemukan hingga runtime. Saat Anda menjalankan atau men-debug API web, Pratinjau Visual Studio versi 17.11 menemukan titik akhir secara dinamis pada waktu proses juga dan menambahkannya ke Penjelajah Titik Akhir.
Buka Penjelajah Titik Akhir
Pilih Tampilkan>Penjelajah Titik Akhir Windows>Lainnya.
Menambahkan permintaan ke .http
file
Klik kanan permintaan di Endpoints Explorer dan pilih Buat Permintaan.
.http
Jika file dengan nama proyek sebagai nama file ada, permintaan ditambahkan ke file tersebut.- Jika tidak,
.http
file dibuat dengan nama proyek sebagai nama file, dan permintaan ditambahkan ke file tersebut.
Cuplikan layar sebelumnya menunjukkan titik akhir yang ditentukan oleh templat proyek API minimal. Contoh berikut menunjukkan permintaan yang dihasilkan untuk titik akhir yang dipilih:
GET {{WebApplication1_HostAddress}}/weatherforecast/
Accept: application/json
###
Kirim permintaan seperti yang dijelaskan sebelumnya dalam artikel ini.
Lihat juga
ASP.NET Core