Имя контроллера получено из имени класса? - PullRequest
5 голосов
/ 20 июля 2011

Это вопрос новичка ...

Я смотрю на проект asp.net mvc3 по умолчанию и заметил, что есть контроллер с именем:

public class AccountController : Controller

Я просматривал всекод и не может найти место, которое указанный AccountController сопоставляет с / Account / для URL.

Я обнаружил, что вы можете изменить маршрутизацию, используя routes.MapRoute(..) в Global.asax, но я все еще не могузнать, где они указали, что AccountController сопоставляется с /Account/.

Если это предполагается из имени класса, то означает ли это, что все классы контроллера должны быть названы xxxxxController?

Ответы [ 3 ]

7 голосов
/ 20 июля 2011

Да, вы правы, все контроллеры должны следовать соглашению об окончании имен "Controller".

См. Свойство ControllerName в коде ASP.NET MVC на CodePlex:

public virtual string ControllerName {
    get {
        string typeName = ControllerType.Name;
        if (typeName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase))
        {
            return typeName.Substring(0, typeName.Length - "Controller".Length);
        }
        return typeName;
    }
}

В любом случае, вы можете изменить соглашение об именах, используя собственную фабрику контроллеров.

Надеюсь, это поможет.

6 голосов
/ 20 июля 2011

Да, это ключевой аспект инфраструктуры MVC, который называется CoC, Соглашение о конфигурации .Идея состоит в том, что, если вы готовы следовать соглашениям по умолчанию для таких вещей, как имена классов, имена методов, структура папок и т. Д., Вы можете минимизировать объем работы, который вам нужно выполнить для работы.Вы только прилагаете усилия, если хотите отклониться от этих соглашений, которые вы, безусловно, можете сделать.

В структуре MVC есть ряд таких элементов.В дополнение к соглашению о том, что все контроллеры являются классами с именем XxxxController, существует соглашение, согласно которому все представления находятся в папке с именем View \ Xxxx \ Yyyyy.cshtml.

0 голосов
/ 20 июля 2011

Да, если вы не внедрили собственную фабрику контроллеров.

...