Почему веб-API для моего региона доступен из всех других областей?

В настоящее время я работаю над проектом веб-приложения ASP.NET MVC 4, который должен соответствовать следующим проектным решениям:

The main MVC application resides in the root of the solution. All administrator functionality resides in a separate area. Each external party (e.g. suppliers) has its own area. Each area, including the root, constitutes a well separated functional block. Functionality from one area may not be exposed to another area. This is to prevent unauthorized access of data. Each area, including the root, has its own RESTfull API (Web API).

Все обычные контроллеры во всех областях, включая root, работают как положено. Однако некоторые из моих контроллеров Web API демонстрируют неожиданное поведение. Например, наличие двух контроллеров Web API с одинаковым именем, но в разных областях приводит к следующему исключению:

Multiple types were found that match the controller named ‘clients’. This can happen if the route that services this request (‘api/{controller}/{id}’) found multiple controllers defined with the same name but differing namespaces, which is not supported.

The request for ‘clients’ has found the following matching controllers: MvcApplication.Areas.Administration.Controllers.Api.ClientsController MvcApplication.Controllers.Api.ClientsController

Это кажется странным, поскольку у меня есть разные маршруты, которые должны разделить оба. Вот моя AreaRegistration для раздела Администрирование:

public class AdministrationAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Administration";
        }
    }

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.Routes.MapHttpRoute(
            name: "Administration_DefaultApi",
            routeTemplate: "Administration/api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        context.MapRoute(
            "Administration_default",
            "Administration/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );
    }
}

Кроме того, я замечаю, что могу получить доступ к веб-API, относящимся к области, при этом опуская название области в вызове.

Что здесь происходит? Как заставить мои контроллеры Web API вести себя так же, как обычные контроллеры ASP.NET MVC?

Ответы на вопрос(1)

Ваш ответ на вопрос