Recebo um URI absoluto que contém uma string de consulta. Estou procurando acrescentar com segurança um valor à string de consulta e alterar um parâmetro existente.
Eu preferiria não insistir &foo=bar
ou usar expressões regulares, porque o escape de URI é complicado. Em vez disso, quero usar um mecanismo integrado que sei que fará isso corretamente e tratará do escape.
Eu encontrei uma tonelada de respostas que todos usam HttpUtility
. No entanto, sendo este ASP.NET Core, não há mais assembly System.Web, portanto, não há mais HttpUtility
.
Qual é a maneira apropriada de fazer isso no ASP.NET Core enquanto direciona o tempo de execução do núcleo?
c#
asp.net
asp.net-core
vcsjones
fonte
fonte
Microsoft.AspNet.WebUtilties
pode ser aMono.HttpUtility
biblioteca .HttpUtility
eParseQueryString
método.Respostas:
Se estiver usando o ASP.NET Core 1 ou 2, você pode fazer isso com
Microsoft.AspNetCore.WebUtilities.QueryHelpers
o pacote Microsoft.AspNetCore.WebUtilities .Se você estiver usando o ASP.NET Core 3.0 ou superior,
WebUtilities
agora faz parte do SDK do ASP.NET e não requer uma referência de pacote nuget separada.Para analisá-lo em um dicionário:
Observe que, ao contrário
ParseQueryString
de System.Web, isso retorna um dicionário do tipoIDictionary<string, string[]>
no ASP.NET Core 1.x ouIDictionary<string, StringValues>
no ASP.NET Core 2.x ou superior, portanto, o valor é uma coleção de strings. É assim que o dicionário lida com vários parâmetros de string de consulta com o mesmo nome.Se quiser adicionar um parâmetro à string de consulta, você pode usar outro método em
QueryHelpers
:Usando .net core 2.2, você pode obter a string de consulta usando
Você obterá uma coleção de pares chave: valor - como este
fonte
Microsoft.AspNetCore.WebUtilities
vez disso.A maneira mais fácil e intuitiva de pegar um URI absoluto e manipular sua string de consulta usando apenas pacotes ASP.NET Core pode ser realizada em algumas etapas fáceis:
Pacotes de instalação
PM> Instalar Pacote Microsoft.AspNetCore.WebUtilities
PM> Instalar Pacote Microsoft.AspNetCore.Http.Extensions
Aulas importantes
Apenas para apontá-los, aqui estão as duas classes importantes que usaremos : QueryHelpers , StringValues , QueryBuilder .
O código
Para se manter atualizado com as alterações, você pode verificar minha postagem do blog sobre isso aqui: http://benjii.me/2017/04/parse-modify-query-strings-asp-net-core/
fonte
HttpRequest
tem umaQuery
propriedade que expõe a string de consulta analisada por meio daIReadableStringCollection
interface:Esta discussão no GitHub também aponta para isso.
fonte
Esta função retorna
Dictionary<string, string>
e não usaMicrosoft.xxx
para compatibilidadeAceita codificação de parâmetro em ambos os lados
Aceita chaves duplicadas (retorna o último valor)
fonte
É importante observar que desde que a resposta principal foi sinalizada como correta
Microsoft.AspNetCore.WebUtilities
, houve uma atualização de versão principal (de 1.xx para 2.xx).Dito isso, se você estiver construindo com base em
netcoreapp1.1
, precisará executar o seguinte, que instala a versão mais recente compatível1.1.2
:Install-Package Microsoft.AspNetCore.WebUtilities -Version 1.1.2
fonte
Eu uso isso como um método de extensão, funciona com qualquer número de parâmetros:
Links seguinte e anterior, por exemplo em uma visualização:
fonte