Маршрутизация на основе атрибутов веб-API в виртуальном каталоге

У меня возникла проблема с вызовом веб-API из приложения angular/hotowel, где контроллер веб-API использует маршрутизацию на основе атрибутов. В настоящее время мне интересно, мешает ли angular, но, честно говоря, я понятия не имею, как это подтвердить.

Мой метод обслуживания выглядит следующим образом:

function getAllOrganizations() {
    return $http.get('api/organizations').then(function (result) {
        return result.data;
    });
}

Он возвращает 404, когда он вызывается:

GET http://localhost/admin/api/organizations 404 (Not Found)

Здесь я должен упомянуть, что приложение размещено в виртуальном каталоге «admin». Проверяя мои маршруты с помощью route.axd, я вижу, что все в порядке (методы = GET, HEAD, OPTIONS, Url = api/organizations и т. д.), соответствующие моему методу/атрибуту (я пробовал это как с ведущим '/', так и без него). без эффекта):

[GET("/api/organizations")]
[HttpGet]
public string GetAllOrganizations()
{
    return "it worked";
}

Есть идеи, что происходит? Какая еще информация будет полезна?

ОБНОВЛЕНИЕ
Возвращение к IIS Express вызвало ошибку в следующих строках:

"Запись ограничения" inboundHttpMethod" на маршруте с шаблоном маршрута "api/Contacts/{id}" должна иметь строковое значение или иметь тип, который реализует "IHttpRouteConstraint"

Устранив это с помощью здесь, запустив этот в IIS Express работает.

(И в последующем тесте перенос приложения на собственный веб-сайт также заставляет его работать...)

Так что, возможно, есть проблема с маршрутизацией на основе атрибутов в виртуальном каталоге — это звонит в колокол?


person Michael    schedule 18.03.2014    source источник
comment
Кажется, что 'localhost/admin/api/organizations' — это 404 из-за административной части маршрут. Не могли бы вы опубликовать больше информации о вашей структуре?   -  person David East    schedule 19.03.2014
comment
Используйте POSTMan (плагин для Chrome) для тестирования серверной части отдельно от клиентской, это упростит отладку.   -  person shaunhusain    schedule 19.03.2014
comment
Хороший глаз - я изменил вопрос, чтобы объяснить, что «admin» — это виртуальный каталог, в котором размещен сайт.   -  person Michael    schedule 19.03.2014
comment
@shaunhusain — POSTMan также сообщил о 404.   -  person Michael    schedule 19.03.2014
comment
Хорошо, это устраняет часть Angular, по крайней мере, на данный момент, пока вы не сможете заставить запрос работать с curl или POSTMan или чем-то подобным, пока не нужно беспокоиться о коде на стороне клиента. К сожалению, я ничего не знаю об ASP.net или настройке сервера, кроме вещей Apache/PHP/Java/Spring, поэтому вам понадобится кто-то еще, чтобы помочь здесь.   -  person shaunhusain    schedule 19.03.2014
comment
Вы можете проверить, не связано ли это с поддоменом, если бы вы запускали его без сервера (или на локальном хосте). В настоящее время мы сталкиваемся с той же проблемой; работает локально, а не в подприложении в IIS. Надеюсь, кто-то знает элегантное решение. (Fiddler также отлично проверяет серверную часть, если вы не хотите запускать плагин Chrome).   -  person NP83    schedule 17.06.2014