Request.QueryString в MVC - PullRequest
       22

Request.QueryString в MVC

1 голос
/ 07 ноября 2011

В моем HomeController я пытаюсь получить информацию, используя Request.QueryString

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

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

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

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

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

И я пытаюсь использовать его следующим образом:
http://localhost:54321/Receive?aa=12345&bb=67890

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

Ресурс не найден.

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

Запрошенный URL: / Получить

Ответы [ 4 ]

2 голосов
/ 07 ноября 2011

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

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

Пример в VB:

Function Retrieve(ByVal aa as String, ByVal bb as String) as ActionResult
2 голосов
/ 07 ноября 2011

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

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

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 }
);
0 голосов
/ 07 ноября 2011

Ваша ошибка 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
);
0 голосов
/ 07 ноября 2011

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

. Вы можете изменить свое действие на

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

ASP.Net MVCрамки будут увлажнять эти предметы для вас.

...