ASP.NET MVC 3 - Что происходит с этим маршрутом? - PullRequest
0 голосов
/ 12 января 2012

Я изучаю ASP.NET MVC 3 и у меня есть вопрос о пользовательских маршрутах.

Если я нахожусь в файле Global.asax.cs и создаю маршрут следующим образом:

routes.MapRoute(
                "CustomRoute",
                "controller/{name}",
                new { controller = "MyControllerName", action = "Search", id = UrlParameter.Optional }
            );

Я предполагаю, что это означает, что мне нужно было бы явно указать слово «контроллер» в URL-адресе, которое затем привело бы к заполнителю с именем «name» (который мог бы действовать как своего рода переменная, которая бы принимала все, что произошлобыть в этой позиции в следующей части URL).

Если бы у меня были фигурные скобки вокруг «контроллера» - например, {контроллер} - это превратило бы «контроллер» в заполнитель (переменную?), Который бы принимал любое значение, отображаемое в URL вэтот момент.

Это правильно?Я использую термин «местозаполнитель» из-за отсутствия лучшего слова - как это на самом деле называется?

Ответы [ 2 ]

1 голос
/ 12 января 2012

Ты вообще прав.

Все слова в фигурных скобках будут обрабатываться как переменные части URL, и большинство из них будет передано в соответствующее действие контроллера в качестве входных параметров. controller и action - это специальные имена переменных в маршруте - они будут использоваться для определения имен контроллеров и действий соответственно.

Например, скажем, у вас есть маршрут

routes.MapRoute(
                "default",
                "{controller}/{action}/{id}",
                new { controller = "MyControllerName", action = "Search", id = UrlParameter.Optional }
            );

Пример совпадений и соответствующих действий:

http://example.com/yourapp/Sample/Test/5 разрешит к контроллеру SampleController (Controller будет добавлено автоматически), действие Test. Если это действие выглядит как

public ActionResult Test(int id)
{
...
}

тогда параметр id будет иметь значение 5 внутри метода.

http://example.com/yourapp/Sample/Test будет разрешен к тому же действию

http://example.com/yourapp/Sample будет указывать на действие Search из SampleController.

Наконец, http://example.com/yourapp/ будет указывать на действие Search на MyControllerNameController.

0 голосов
/ 12 января 2012

Это интересный вопрос. Я считаю, что использование слов «controller», «action» и «id» является частью соглашения ASP.NET MVC «соглашение о конфигурации». Как вы сказали, они просто переменные-заполнители. Вы можете использовать другие имена переменных для частей URL-адреса, если вы соблюдаете соглашение об именовании (параметры по умолчанию) при именовании контроллеров во всем приложении. Например

routes.MapRoute(
    "Index",
    "{foobar}/{action}/{id}",
    new { foobar= "Home", action = "Index", id= UrlParameter.Optional }
);

Теперь, конечно, вы должны будете назвать свой Home контроллер «HomeFoobar», а все остальные ваши контролеры должны быть названы «NameFoobar». Ваши контроллеры "Foobar" по-прежнему должны наследоваться от контроллера.

Если вы не используете {curly_braces} вокруг имен параметров url, вы получите следующую ошибку

Ошибка сервера в приложении '/'.

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

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

----------------------------------------------- --------------------------------- Информация о версии: Microsoft .NET Framework Версия: 4.0.30319; ASP.NET версия: 4.0.30319.272

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