Använda .http-filer i Visual Studio 2022
Filredigeraren Visual Studio 2022.http
är ett bekvämt sätt att testa ASP.NET Core-projekt, särskilt API-appar. Redigeraren tillhandahåller ett användargränssnitt som:
- Skapar och uppdaterar
.http
filer. - Skickar HTTP-begäranden som anges i
.http
filer. - Visar svaren.
Den här artikeln innehåller dokumentation för:
-
Syntaxen för
.http
-filen. -
Skapa en
.http
-fil. -
Så här skickar du en begäran från en
.http
-fil. -
Var hittar du
.http
filalternativ som kan konfigureras. -
Så här skapar du begäranden i
.http
filer med hjälp av Visual Studio 2022 Endpoints Explorer.
Filformatet .http
och redigeraren inspirerades av Visual Studio Code REST-klienttillägget. Visual Studio 2022 .http
-redigeraren identifierar .rest
som ett alternativt filnamnstillägg för samma filformat.
Förutsättningar
- Visual Studio 2022 version 17.8 eller senare med arbetsbelastningen ASP.NET och webbutveckling installerad.
.http
filsyntax
I följande avsnitt förklaras .http
filsyntax.
Förfrågningar
Formatet för en HTTP-begäran är HTTPMethod URL HTTPVersion
, allt på en rad, där:
-
HTTPMethod
är den HTTP-metod som ska användas, till exempel: -
URL
är url:en som begäran ska skickas till. URL:en kan innehålla frågesträngsparametrar. URL:en behöver inte peka på ett lokalt webbprojekt. Den kan peka på alla URL:er som Visual Studio kan komma åt. -
HTTPVersion
är valfritt och anger den HTTP-version som ska användas, d.v.s.HTTP/1.1
,HTTP/2
ellerHTTP/3
.
En fil kan innehålla flera begäranden med hjälp av rader med ###
som avgränsare. Följande exempel som visar tre begäranden i en fil illustrerar den här syntaxen:
GET https://localhost:7220/weatherforecast
###
GET https://localhost:7220/weatherforecast?date=2023-05-11&location=98006
###
GET https://localhost:7220/weatherforecast HTTP/3
###
Begärandehuvuden
Om du vill lägga till en eller flera rubriker lägger du till varje rubrik på sin egen rad direkt efter begäranderaden. Ta inte med några tomma rader mellan begäranderaden och den första rubriken eller mellan efterföljande rubrikrader. Formatet är HeaderName: Value
, enligt följande exempel:
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
###
Viktig
När du anropar ett API som autentiserar med huvuden ska du inte överföra några hemligheter till ett källkodsförråd. Se de metoder som stöds för att lagra hemligheter senare i den här artikeln, till exempel ASP.NET Core-användarhemligheter, Azure Key Vault och DPAPI-kryptering.
Begärandetext
Lägg till begärandetexten efter en tom rad, enligt följande exempel:
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"
}
###
Kommentarer
Rader som börjar med antingen #
eller //
är kommentarer. Dessa rader ignoreras när Visual Studio skickar HTTP-begäranden.
Variabler
En rad som börjar med @
definierar en variabel med hjälp av syntaxen @VariableName=Value
.
Variabler kan refereras till i begäranden som definieras senare i filen. De refereras genom att omsluta sina namn i dubbla klammerparenteser, {{
och }}
. I följande exempel visas två variabler som definierats och används i en begäran:
@hostname=localhost
@port=44320
GET https://{{hostname}}:{{port}}/weatherforecast
Variabler kan definieras med hjälp av värden för andra variabler som definierades tidigare i filen. I följande exempel används en variabel i begäran i stället för de två som visas i föregående exempel:
@hostname=localhost
@port=44320
@host={{hostname}}:{{port}}
GET https://{{host}}/api/search/tool
Miljöfiler
Om du vill ge variabler olika värden i olika miljöer skapar du en fil med namnet http-client.env.json
. Leta upp filen i samma katalog som .http
-filen eller i någon av dess överordnade kataloger. Här är ett exempel på en miljöfil:
{
"dev": {
"HostAddress": "https://localhost:44320"
},
"remote": {
"HostAddress": "https://contoso.com"
}
}
Miljöfilen är en JSON-fil som innehåller en eller flera namngivna miljöer, till exempel "dev" och "remote" i föregående exempel. Varje namngiven miljö innehåller en eller flera variabler, till exempel HostAddress
i föregående exempel. Variabler från en miljöfil refereras på samma sätt som andra variabler, som du ser i följande exempel:
GET {{HostAddress}}/api/search/tool
Värdet som används för variabeln när du skickar en begäran bestäms av en listruta för miljöväljaren i det övre högra hörnet i .http
filredigeraren. Följande skärmbild visar väljaren:
Miljöfilen behöver inte finnas i projektmappen. Visual Studio letar efter en miljöfil i mappen där .http
filen finns. Om den inte finns i den mappen söker Visual Studio igenom de överordnade katalogerna för att hitta den. När en fil med namnet http-client.env.json
hittas avslutas sökningen. Filen som finns närmast den .http
filen används.
När du har skapat eller redigerat en .http
fil kan du behöva stänga och öppna projektet igen för att se ändringarna som återspeglas i miljöväljaren. Tryck på F6 för att välja miljöväljaren.
Visual Studio visar varningar i följande situationer:
- Filen
.http
refererar till en variabel som inte har definierats i.http
-filen eller i miljöfilen. - Miljöfilen innehåller en variabel som inte refereras till i filen
.http
.
En variabel som definieras i en miljöfil kan vara samma som den som definierats i .http
-filen, eller så kan den vara annorlunda. Om en variabel definieras i både .http
-filen och miljöfilen åsidosätter värdet i .http
-filen värdet i miljöfilen.
Delade variabler
$shared
är ett särskilt miljönamn för värden som är samma för flera miljöer. Tänk till exempel på följande miljöfil (http-client.env.json
):
{
"$shared": {
"HostAddress": "https://localhost:7293"
},
"dev1": {
"username": "dev1user"
},
"dev2": {
"username": "dev2user"
},
"staging": {
"username": "staginguser",
"HostAddress": "https://staging.contoso.com"
}
}
I föregående exempel definierar $shared
-miljön variabeln HostAddress
med värdet localhost:7293
. Variabeln HostAddress
med värdet localhost:7293
fungerar som standard för miljöer som inte definierar en HostAddress
. När dev1
- eller dev2
-miljön har definierats kommer värdet för HostAddress
från den $shared
miljön eftersom dev1
och dev2
inte definierar en HostAddress
variabel. När den staging
miljön har definierats anges värdet för HostAddress
till https://staging.contoso.com
, vilket överskrider standardvärdet för $shared
.
Användarspecifika miljöfiler
Ett användarspecifikt värde är ett värde som en utvecklare vill testa med men inte vill dela med teamet. Den http-client.env.json
filen är incheckad i källkontrollen som standard, därför INTE lägga till användarspecifika värden i den här filen. Lägg i stället till användarspecifika värden i en fil med namnet http-client.env.json.user
. Filen http-client.env.json.user
finns i samma mapp som den http-client.env.json
filen. Filer som slutar med .user
undantas som standard från källkontrollen när du använder Visual Studio-funktioner för källkontroll.
När http-client.env.json
-filen läses in letar Visual Studio efter en systerfil http-client.env.json.user
. Om en variabel definieras i en miljö i både http-client.env.json
-filen och den http-client.env.json.user
filen vinner värdet i http-client.env.json.user
-filen.
Här är ett exempelscenario som visar hur en användarspecifik miljöfil fungerar. Anta att filen .http
har följande innehåll:
GET {{HostAddress}}/{{Path}}
Accept: application/json
Anta att filen http-client.env.json
innehåller följande innehåll:
{
"dev": {
"HostAddress": "https://localhost:7128",
"Path": "/weatherforecast"
},
"remote": {
"HostAddress": "https://contoso.com",
"Path": "/weatherforecast"
}
}
Och anta att det finns en användarspecifik miljöfil som innehåller följande innehåll:
{
"dev": {
"Path": "/swagger/index.html"
}
}
När användaren väljer "dev"-miljön skickas begäran till https://localhost:7128/swagger/index.html
eftersom Path
-värdet i http-client.env.json.user
-filen åsidosätter värdet från http-client.env.json
-filen.
Anta att variablerna definieras i filen .http
med samma miljöfiler:
@HostAddress=https://contoso.com
@Path=/weatherforecast
GET {{HostAddress}}/{{Path}}
Accept: application/json
I det här scenariot skickas "dev"-miljöbegäran till https://contoso.com/weatherforecast
eftersom variabeldefinitioner i .http
filer åsidosätter miljöfildefinitioner.
ASP.NET Core-användarhemligheter
Om du vill hämta ett värde från användarhemligheteranvänder du en miljöfil som finns i samma mapp som ASP.NET Core-projektet. I miljöfilen definierar du en variabel som har egenskaper för provider
och secretName
. Ange värdet provider
till AspnetUserSecrets
och ange secretName
till namnet på den önskade användarhemligheten. Följande miljöfil definierar till exempel en variabel med namnet ApiKeyDev
som hämtar dess värde från config:ApiKeyDev
användarhemlighet:
{
"dev": {
"ApiKeyDev": {
"provider": "AspnetUserSecrets",
"secretName": "config:ApiKeyDev"
}
}
}
Om du vill använda den här variabeln i filen .http
refererar du till den som en standardvariabel. Till exempel:
GET {{HostAddress}}{{Path}}
X-API-KEY: {{ApiKeyDev}}
När begäran skickas finns hemlighetens värde för ApiKeyDev
i X-API-KEY-rubriken.
När du skriver i filen http
visar redigeraren en slutförandelista för variabelnamnet men visar inte dess värde.
Azure Key Vault
Azure Key Vault är en av flera viktiga hanteringslösningar i Azure som kan användas för hantering av hemligheter. Av de tre hemlighetslagringslösningar som för närvarande stöds för .http
-filer är Key Vault det bästa valet för att dela dessa mellan olika användare. De andra två alternativen–ASP.NET User Secrets och DPAPI-kryptering– är svåra att dela.
Om du vill använda ett värde från Azure Key Vault måste du vara inloggad i Visual Studio med ett konto som har åtkomst till önskat Key Vault.
Definiera en variabel i en miljöfil med metadata för att få åtkomst till hemligheten. Variabeln heter AKVSecret
i följande exempel:
{
"dev": {
"AKVSecret": {
"provider": "AzureKeyVault",
"secretName": "SecretInKeyVault",
"resourceId": "/subscriptions/3a914c59-8175a9e0e540/resourceGroups/my-key-vault-rg/providers/Microsoft.KeyVault/vaults/my-key-vault-01182024"
}
}
}
Variabeln AKVSecret
hämtar sitt värde från Azure Key Vault. Följande egenskaper definieras på AKVSecret
:
Namn | Beskrivning |
---|---|
leverantör | För Key Vault använder du alltid AzureKeyVault . |
hemligtNamn | Namnet på hemligheten som ska extraheras. |
resourceId | Azure-resurs-ID för det specifika Key Vault som ska kommas åt. |
Värdet för egenskapen resourceId
finns i Azure-portalen. Gå till Inställningar > Egenskaper för att hitta den. För secretName
använder du namnet på hemligheten som visas på sidan Secrets i Azure-portalen.
Följande .http
-fil har till exempel en begäran som använder det här hemliga värdet.
GET {{HostAddress}}{{Path}}
X-AKV-SECRET: {{akvSecret}}
DPAPI-kryptering
I Windows finns det en DATASKYDDS-API (DPAPI) som kan användas för att kryptera känsliga data. När DPAPI används för att kryptera data är de krypterade värdena alltid maskinspecifika, och de är också användarspecifika i .http
filer. Dessa värden kan inte delas med andra användare.
Om du vill kryptera ett värde använder du följande konsolprogram:
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);
Föregående konsolprogram refererar till System.Security.Cryptography.ProtectedData NuGet-paketet. Om du vill att det krypterade värdet ska fungera i filen .http
krypterar du med omfånget inställt på DataProtectionScope.CurrentUser. Det krypterade värdet är en base64-kodad sträng som kan kopieras och klistras in i miljöfilen.
I miljöfilen skapar du en variabel som har egenskaper för provider
och value
. Ange provider
till Encrypted
och ange value
till det krypterade värdet. Följande miljöfil definierar till exempel en variabel med namnet dpapiValue
som hämtar dess värde från en sträng som krypterades med DPAPI.
{
"dev": {
"dpapiValue": {
"provider": "Encrypted",
"value": "AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA5qwfg4+Bhk2nsy6ujgg3GAAAAAACAAAAAAAQZgAAAAEAACAAAAAqNXhXc098k1TtKmaI4cUAbJVALMVP1zOR7mhC1RBJegAAAAAOgAAAAAIAACAAAABKu4E9WC/zX5LYZZhOS2pukxMTF9R4yS+XA9HoYF98GzAAAAAzFXatt461ZnVeUWgOV8M/DkqNviWUUjexAXOF/JfpJMw/CdsizQyESus2QjsCtZlAAAAAL7ns3u9mEk6wSMIn+KNsW/vdAw51OaI+HPVrt5vFvXRilTtvGbU/JnxsoIHj0Z7OOxlwOSg1Qdn60zEqmlFJBg=="
}
}
}
Med den föregående miljöfilen kan dpapiValue
användas i .http
-filen som vilken annan variabel som helst. Till exempel:
GET {{HostAddress}}{{Path}}
X-DPAPI-Secret: {{dpapiSecret}}
När den här begäran skickas har X-DPAPI-Secret det dekrypterade hemliga värdet.
Miljövariabler
Om du vill hämta värdet för en miljövariabel använder du $processEnv
. I följande exempel placeras värdet för miljövariabeln USERNAME i X-UserName-huvudet.
GET {{HostAddress}}{{Path}}
X-UserName: {{$processEnv USERNAME}}
Om du försöker använda $processEnv
för att komma åt en miljövariabel som inte finns visas ett felmeddelande i .http
filredigeraren.
.env
filer
Om du vill hämta värdet för en variabel som har definierats i en .env
fil använder du $dotenv
. Filen .env
måste finnas i projektmappen. Formatet för $dotenv
är detsamma som för $processEnv
. Om .env
-filen till exempel har det här innehållet:
USERNAME=userFromDotenv
Och .http
-filen har det här innehållet:
GET {{HostAddress}}{{Path}}
X-UserName: {{$dotEnv USERNAME}}
Rubriken X-UserName
kommer att ha "userFromDotenv".
När $dotenv
anges i redigeraren visas slutföranden för variablerna som definierats i filen .env
.
Not
.env
filer kanske inte utesluts från källkontrollen som standard, så var noga med att undvika att checka in några hemliga värden.
Slumpmässiga heltal
Om du vill generera ett slumpmässigt heltal använder du $randomInt
. Syntaxen är {{$randomInt [min max]}}
där värdena för min
och max
är valfria.
Datum och tider
-
$datetime
genererar endatetime
sträng i UTC. Syntaxen är{{$datetime [format] [offset option]}}
, där formaterings- och förskjutningsalternativen är valfria. -
$localDatetime
genererar endatetime
sträng i den lokala tidszonen. Syntaxen är{{$localDatetime [format] [offset option]}}
, där formaterings- och förskjutningsalternativen är valfria. -
$timeStamp
genererar entimestamp
i UTC.timestamp
är det antalet sekunder sedan Unix-epoken i UTC-tid. Syntaxen är{{$timestamp [offset option]}}
där förskjutningsalternativet är valfritt.
Alternativet [format]
är ett av rfc1123
, iso8601
eller ett anpassat format inom citattecken. Till exempel:
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}}
Här är några exempelvärden som de föregående exemplen genererar:
{
"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"
}
}
Syntaxen för [offset option]
är i formuläret number
unit
där number
är ett heltal och unit
är ett av följande värden:
unit |
Förklaring |
---|---|
ms |
Millisekunder |
s |
Sekunder |
m |
Protokoll |
h |
Timmar |
d |
Dagar |
w |
Veckor |
M |
Månader |
y |
År |
Till exempel:
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}}
Här är några exempelvärden som de föregående exemplen genererar:
{
"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"
}
}
Några av föregående exempel använder den kostnadsfria webbplatsen med öppen källkod <httpbin.org>. Det här är en webbplats från tredje part som inte är ansluten till Microsoft. I dessa exempel returneras en svarstext med rubrikerna som skickades i begäran. Information om andra sätt att använda den här resursen för API-testning finns på httpbin.org webbplats startsida.
Syntax som inte stöds
Visual Studio 2022 .http
filredigeraren har inte alla funktioner som Visual Studio Code REST klienttillägget har. Följande lista innehåller några av de mer viktiga funktionerna som endast är tillgängliga i Visual Studio Code-tillägget:
- Begärningsrad som sträcker sig över flera rader
- Namngivna begäranden
- Ange filsökväg som brödtext i begäran
- Blandat format för brödtext när du använder fleraparts-/formulärdata
- GraphQL-begäranden
- cURL-begäran
- Kopiera/klistra in som cURL
- Begärandehistorik
- Spara svarstext i filen
- Certifikatbaserad autentisering
- Promptvariabler
- Anpassa förhandsgranskning av svar
- Inställningar per förfrågan
Skapa en .http
fil
Högerklicka på ett ASP.NET Core-projekt i Solution Explorer.
I snabbmenyn väljer du Lägg till>Nytt objekt.
I dialogrutan Lägg till nytt objekt väljer du ASP.NET Core>Allmänt.
Välj HTTP-filoch välj Lägg till.
Skicka en HTTP-begäran
Lägg till minst en begäran till en
.http
fil och spara filen.Om begärans URL pekar på localhost och projektets port kör du projektet innan du försöker skicka en begäran till den.
Välj länken
Send Request
ellerDebug
som är direkt ovanför den begäran som ska skickas.Begäran skickas till den angivna URL:en och svaret visas i ett separat fönster till höger om redigeringsfönstret.
.http
filalternativ
Vissa aspekter av .http
filbeteende kan konfigureras. Om du vill se vad som är tillgängligt går du till Verktyg>Alternativ>textredigeraren>Rest. Timeout-inställningen kan till exempel konfigureras på fliken Avancerat. Här är en skärmbild av dialogrutan Alternativ:
Använd Endpoints Explorer
Endpoints Explorer är ett verktygsfönster som visar alla slutpunkter som ett webb-API definierar. Med verktyget kan du skicka begäranden till slutpunkterna med hjälp av en .http
fil.
Den första uppsättningen slutpunkter som visas av Endpoints Explorer identifieras statiskt. Det finns vissa slutpunkter som inte kan identifieras statiskt. Ändpunkter som definierats i ett klassbiblioteksprojekt kan till exempel inte upptäckas förrän vid körning. När du kör eller felsöker ett webb-API identifierar Visual Studio version 17.11 Preview slutpunkter dynamiskt vid körning och lägger även till dem i Endpoints Explorer.
Öppna Endpoints Explorer
Välj View>Other Windows>Endpoints Explorer.
Lägga till en begäran i en .http
-fil
Högerklicka på en begäran i Endpoints Explorer och välj Generera begäran.
- Om en
.http
-fil med projektnamnet som filnamn finns, läggs begäran till i den filen. - Annars skapas en
.http
fil med projektnamnet som filnamn och begäran läggs till i filen.
Föregående skärmbild visar slutpunkter som definierats av den minimala API-projektmallen. I följande exempel visas den begäran som genereras för den valda slutpunkten:
GET {{WebApplication1_HostAddress}}/weatherforecast/
Accept: application/json
###
Skicka begäran enligt beskrivningen tidigare i den här artikeln.
Se även
ASP.NET Core