Запрос.Строка запроса в MVC

#asp.net-mvc-2 #request.querystring

#asp.net-mvc-2 #запрос.строка запроса

Вопрос:

В моем HomeController я пытаюсь получить информацию с помощью запроса.Строка запроса

         string aa = Request.QueryString["aa"];
        string bb = Request.QueryString["bb"];
  

Итак, в адресной строке я ожидаю чего-то вроде:

<что-то>?aa= 12345amp; bb=67890

Я создал новый маршрут:

         routes.MapRoute(
            "Receive",
            "Receive",
            new { controller = "Home", action = "Index" }
        );
  

И я пытаюсь использовать это таким образом:
http://localhost:54321/Receive?aa=12345amp;bb=67890

Но я получаю следующую ошибку:

Ресурс не может быть найден.

Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), мог быть удален, его имя было изменено или он временно недоступен. Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрошенный URL: /Receive

Комментарии:

1. Вам не нужно использовать Reuqest.Querysting. Используйте параметры Действия.

2. Я получаю эту часть: ?aa = 12345 amp; bb = 67890 из внешнего источника

3. Я думаю, что ваша маршрутизация ошибочна, поэтому вы получаете 404. Пожалуйста, посмотрите на некоторые руководства, в частности, здесь: asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs Также, как говорит @YuriyFaktorovich, вам действительно не следует использовать Request. Строка запроса, а скорее передача их в качестве параметров вашему методу действия (функция извлекает (вводит aa как строку, вводит bb как строку) в качестве actionresult)

4. Спасибо, Томми, мне просто нужно было сначала указать свой маршрут, и это решило весь вопрос с помощью строки запроса! 🙂

5. Потрясающе — рад, что это сработало для вас! Я собираюсь указать это в качестве ответа, не стесняйтесь отмечать это, когда у вас будет такая возможность.

Ответ №1:

Я думаю, что ваша маршрутизация ошибочна, поэтому вы получаете 404. Пожалуйста, посмотрите на некоторые руководства, в частности, здесь:asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs

Кроме того, как говорит @YuriyFaktorovich, вам действительно не следует использовать Request.Строка запроса, а скорее передача их в качестве параметров вашему методу действия

Пример в VB:

 Function Retrieve(ByVal aa as String, ByVal bb as String) as ActionResult
  

Комментарии:

1. @Bojangles — да, они делают. Это язык, который существует уже более 20 лет. У VB все еще очень активное и большое сообщество. Но, спасибо за ваши идеи.

Ответ №2:

Вы можете получить доступ к значениям строки запроса двумя способами…

  • извлеките значения при инициализации контроллера
  • используйте значения в своем действии
  • указание маршрута с этими переменными

1 — захватить значения при инициализации контроллера

 protected override void Initialize(RequestContext requestContext) {
    // you can access and assign here what you need and it will be fired
    //  for every time he controller is initialized / call

    string aa = requestContext.HttpContext.Request.QueryString["aa"],
           bb = requestContext.HttpContext.Request.QueryString["bb"];

    base.Initialize(requestContext);
}
  

2 — используйте значения в своем действии

 public void ActionResult Index(string aa, string bb) {
    // use the variables aa and bb, 
    //  they are the routing values for the keys aa and bb
}
  

3 — указание маршрута с этими переменными

 routes.MapRoute(
    "Receive",
    "Receive/{aa}/{bb}",
    new { 
        controller = "Home", 
        action = "Index", 
        aa = UrlParameter.Optional, 
        bb = UrlParameter.Optional }
);
  

Ответ №3:

Используйте "Receive/" для URL-адреса в маршруте и не используйте Request.Querystring .

Вы можете изменить свое действие, чтобы быть

 public ActionResult Index(string aa, string bb) {...}
  

The ASP.Net Фреймворк MVC увлажнит эти элементы для вас.

Ответ №4:

Ваша ошибка HTTP 404 связана с тем, что ваш новый маршрут, скорее всего, находится не в том месте. Убедитесь, что ваш новый маршрут находится перед маршрутом по умолчанию:

 routes.MapRoute(
        "Receive",
        "Receive",
        new { controller = "Home", action = "Index" }
    ); 

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);