ASP.NET MVC - получение значений QueryString - PullRequest
66 голосов
/ 09 марта 2009

В ASP.NET MVC вы должны получать параметры QueryString так же, как в ASP.NET WebForms? или объявление [AcceptVerbs(HttpVerbs.Get)] как-то привыкло?

Ответы [ 5 ]

102 голосов
/ 09 марта 2009

Параметры строки запроса могут быть приняты просто с помощью аргумента в действии - т.е.

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

, который примет запрос типа .../someroute?someValue=abc&someOtherValue=123

Кроме этого, вы можете посмотреть запрос напрямую для большего контроля.

24 голосов
/ 09 марта 2009

Вы всегда можете использовать Request.QueryString коллекцию, как веб-формы, но вы также можете заставить MVC обрабатывать их и передавать их в качестве параметров. Это рекомендуемый способ, поскольку он проще и автоматически проверяет тип входных данных.

23 голосов
/ 27 октября 2016

Я думаю, что вы ищете

Request.QueryString["QueryStringName"]

и вы можете получить к нему доступ, добавив @

Теперь посмотрите на мой пример. Я сгенерировал URL с QueryString

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

значение listURL равно /Sector/List?name=value'

и когда queryString пусто

значение listURL равно /Sector/List

7 голосов
/ 09 марта 2009

Я рекомендую использовать свойство контроллера ValueProvider, во многом так же, как это делают UpdateModel / TryUpdateModel для извлечения параметров маршрута, запроса и формы. Это предотвратит слишком большой рост сигнатур методов и их частое изменение. Это также облегчает тестирование, поскольку вы можете предоставить ValueProvider контроллеру во время модульных тестов.

1 голос
/ 03 июля 2017

На самом деле вы можете захватывать строки запроса в MVC двумя способами .....

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);

}

Это будет захватывать обе строки запроса ... например:

/CrazyMVC?knownQuerystring=123&unknownQuerystring=456

Output: 123 - 456

Не спрашивайте меня, почему они так спроектировали. Было бы больше смысла, если бы они выбросили всю систему действий контроллера для отдельных строк запроса и просто вернули захваченный динамический список всех строк / закодированных файловых объектов для URL-адреса с помощью кодировки url-form, чтобы вы могли легко получить доступ к ним всем за один вызов , Может быть, кто-то здесь может продемонстрировать это, если это возможно?

Не имеет никакого смысла для меня, как контроллеры собирают строки запроса, но это означает, что у вас больше гибкости для захвата строк запроса, чем они учат вас из коробки. Так что подбери свой яд .... оба отлично работают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...