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