ASP.NET MVC – Obtendo valores de QueryString

Sob ASP.NET MVC você deveria pegar params QueryString da mesma maneira que você faz em ASP.NET WebForms? ou a declaração [AcceptVerbs(HttpVerbs.Get)] é usada de alguma forma?

Os parâmetros da string de consulta podem ser aceitos simplesmente usando um argumento na ação – ou seja,

 public ActionResult Foo(string someValue, int someOtherValue) {...} 

que aceita uma consulta como .../someroute?someValue=abc&someOtherValue=123

Fora isso, você pode olhar diretamente para o pedido para obter mais controle.

Você sempre pode usar a coleção Request.QueryString como formulários da Web, mas também pode fazer com que o MVC os manipule e os transmita como parâmetros. Esta é a maneira sugerida, pois é mais fácil e validará o tipo de dados de input automaticamente.

Eu acho que o que você está procurando é

 Request.QueryString["QueryStringName"] 

e você pode acessá-lo em visualizações adicionando @

Agora olhe para o meu exemplo ,,, eu gerou um URL com QueryString

  var listURL = '@Url.RouteUrl(new { controller = "Sector", action = "List" , name = Request.QueryString["name"]})'; 

o valor listURL é /Sector/List?name=value'

e quando queryString está vazio

O valor de listURL é /Sector/List

Eu recomendo usar a propriedade ValueProvider do controlador, da mesma forma que UpdateModel / TryUpdateModel faz para extrair os parâmetros de rota, consulta e formulário necessários. Isso evitará que as assinaturas de methods fiquem potencialmente muito grandes e sujeitas a alterações frequentes. Isso também torna um pouco mais fácil de testar, já que você pode fornecer um ValueProvider ao controlador durante os testes de unidade.

Na verdade, você pode capturar seqüências de caracteres de consulta no MVC de duas maneiras …..

 public ActionResult CrazyMVC(string knownQuerystring) { // This is the known query string captured by the Controller Action Method parameter above string myKnownQuerystring = knownQuerystring; // This is what I call the mysterious "unknown" query string // It is not known because the Controller isn't capturing it string myUnknownQuerystring = Request.QueryString["unknownQuerystring"]; return Content(myKnownQuerystring + " - " + myUnknownQuerystring); } 

Isso capturaria as duas strings de consulta … por exemplo:

 /CrazyMVC?knownQuerystring=123&unknownQuerystring=456 Output: 123 - 456 

Não me pergunte por que eles projetaram dessa maneira. Faria mais sentido se eles descartassem todo o sistema de ação do Controller para strings de consulta individuais e apenas retornassem uma lista dinâmica capturada de todos os objects de arquivo codificados / codificados para o URL pela codificação de forma de url para que você pudesse acessá-los facilmente em uma chamada . Talvez alguém aqui possa demonstrar que, se é possível?

Não faz sentido para mim como os Controladores capturam as strings de consulta, mas isso significa que você tem mais flexibilidade para capturar strings de consulta do que elas o ensinam imediatamente. Então pegue seu veneno … ambos funcionam bem.