Почему действия контроллера области ASP.Net MVC2 могут вызываться без включения области в путь URL-адреса? - PullRequest
1 голос
/ 18 апреля 2010

Я только что установил Visual Studio 2010 и создал новый проект MVC2, чтобы я мог узнать об изменениях и обновлениях и обнаружил проблему в областях, в которых я не уверен, что делать.

  1. Я создал новый проект EMPTY MVC2
  2. Я щелкнул правой кнопкой мыши по проекту и из контекстного меню добавил новую область под названием «Тест»
  3. В новой области тестирования я добавил контроллер под названием «Данные».

Код:

public class DataController : Controller
{
    //
    // GET: /Test/Data/

    public ActionResult Index()
    {
        Response.Write("Hi");
        return new EmptyResult();
    }
}

Теперь я собираю и называю этот адрес: http://localhost/mytest/test/data и получите вывод:

Hi

Все хорошо. Теперь я называю это: http://localhost/mytest/data и получаю такой же ответ ! Я думал, что маршрутизация должна была позаботиться об этом? Я что-то пропускаю? Или настройки проекта по умолчанию для MVC2 что-то упустили?

1 Ответ

2 голосов
/ 19 апреля 2010

Это намеренно. Маршрут по умолчанию в Global.asax не ограничивает его поиск определенной областью или набором пространств имен. Существуют перегрузки MapRoute (см. один пример для MSDN ), которые принимают параметр namespaces , который можно использовать для устранения неоднозначности, какой контроллер был задан этим запросом. Но даже в этом случае параметр namespaces является лишь подсказкой о том, в каких пространствах имен искать в первую очередь; это не ограничение.

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

...