Otrzymuję bezwzględny identyfikator URI zawierający ciąg zapytania. Chcę bezpiecznie dołączyć wartość do ciągu zapytania i zmienić istniejący parametr.
Wolałbym nie dołączać &foo=bar
ani nie używać wyrażeń regularnych, ucieczka URI jest trudna. Raczej chcę użyć wbudowanego mechanizmu, o którym wiem, że zrobi to poprawnie i poradzi sobie z ucieczką.
Mam znaleźć się mnóstwo odpowiedzi, że wszyscy użytku HttpUtility
. Jednak to jest ASP.NET Core, nie ma już zestawu System.Web, więc nie ma więcej HttpUtility
.
Jaki jest odpowiedni sposób na zrobienie tego w ASP.NET Core podczas określania podstawowego środowiska uruchomieniowego?
c#
asp.net
asp.net-core
vcsjones
źródło
źródło
Microsoft.AspNet.WebUtilties
może byćMono.HttpUtility
biblioteka .HttpUtility
iParseQueryString
.Odpowiedzi:
Jeśli używasz ASP.NET Core 1 lub 2, możesz to zrobić
Microsoft.AspNetCore.WebUtilities.QueryHelpers
w pakiecie Microsoft.AspNetCore.WebUtilities .Jeśli używasz ASP.NET Core 3,0 lub nowszego,
WebUtilities
jest teraz częścią zestawu ASP.NET SDK i nie wymaga oddzielnego odwołania do pakietu NuGet.Aby przeanalizować go w słowniku:
Należy pamiętać, że w przeciwieństwie
ParseQueryString
do System.Web zwraca słownik typuIDictionary<string, string[]>
w ASP.NET Core 1.x lubIDictionary<string, StringValues>
w ASP.NET Core 2.x lub nowszym, więc wartość jest zbiorem ciągów. W ten sposób słownik obsługuje wiele parametrów ciągu zapytania o tej samej nazwie.Jeśli chcesz dodać parametr do ciągu zapytania, możesz użyć innej metody na
QueryHelpers
:Używając .net core 2.2 możesz uzyskać ciąg zapytania używając
Otrzymasz zbiór par klucz: wartość - w ten sposób
źródło
Microsoft.AspNetCore.WebUtilities
.Najłatwiejszy i najbardziej intuicyjny sposób na pobranie bezwzględnego identyfikatora URI i manipulowanie jego ciągiem zapytania przy użyciu tylko pakietów ASP.NET Core można wykonać w kilku prostych krokach:
Zainstaluj pakiety
PM> Install-Package Microsoft.AspNetCore.WebUtilities
PM> Install-Package Microsoft.AspNetCore.Http.Extensions
Ważne zajęcia
Wystarczy wskazać je, tu są dwa ważne zajęcia będziemy używać: QueryHelpers , StringValues , QueryBuilder .
Kod
Aby być na bieżąco z wszelkimi zmianami, możesz sprawdzić mój wpis na blogu na ten temat tutaj: http://benjii.me/2017/04/parse-modify-query-strings-asp-net-core/
źródło
HttpRequest
maQuery
właściwość, która ujawnia przeanalizowany ciąg zapytania za pośrednictwemIReadableStringCollection
interfejsu:Ta dyskusja na GitHub również na to wskazuje.
źródło
Ta funkcja zwraca
Dictionary<string, string>
i nie jest używana wMicrosoft.xxx
celu zapewnienia zgodnościAkceptuje kodowanie parametrów po obu stronach
Akceptuje zduplikowane klucze (zwraca ostatnią wartość)
źródło
Należy zauważyć, że od czasu, kiedy pierwsza odpowiedź została oznaczona jako prawidłowa,
Microsoft.AspNetCore.WebUtilities
nastąpiła główna aktualizacja wersji (z 1.xx do 2.xx).To powiedziawszy, jeśli tworzysz przeciwko
netcoreapp1.1
, będziesz musiał uruchomić następujące oprogramowanie, które zainstaluje najnowszą obsługiwaną wersję1.1.2
:Install-Package Microsoft.AspNetCore.WebUtilities -Version 1.1.2
źródło
Używam tego jako metody rozszerzającej, działa z dowolną liczbą parametrów:
Następny i poprzedni link, na przykład w widoku:
źródło