2015-02-07 2 views
0

я создал новый проект Web API и создал следующие маршрутизации спецификации (на самом деле я упростил, глядя на ошибку):Web API разрешает только один контроллер

// Web API configuration and services 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}/{id}" 
    ); 

Когда я делаю вызов через AJAX с маршрут:

/api/account/GetSUID/0 

все работает нормально. Когда я просто использовать другой контроллер:

/api/tile/GetTileSet/0 

он возвращает статус 200, но вместо удара моего контроллера, он просто возвращает содержимого страницы по умолчанию в jqXHR.responseText! Это похоже на то, что он просто пропускает любую API-маршрутизацию, например, я запрашиваю страницу сайта по умолчанию.

Я озадачен этим, так как в течение нескольких последних лет я написал буквально сотни функций веб-API в нескольких других проектах. У меня никогда не было проблем с вызовами нескольких контроллеров. Я выглядел высоко и низко для того, что может происходить здесь, и я надеюсь, что у кого-то здесь может быть идея.

Вот метод выборки на контроллере:

[HttpGet] 
    public HttpResponseMessage CheckRequestedID(int id, [FromUri]string Search) 
    { 
     if (!BSDIUtil.HasAllAcceptableCharacters(Search)) 
      return Request.CreateResponse(HttpStatusCode.BadRequest); 
     if (FolderModel.IDAlreadyExists(DAL, Search)) // We can check this because this function is only called when staff members are creating accounts for other people (participants always use their email). 
      return Request.CreateResponse(HttpStatusCode.OK, false); 
     else 
      return Request.CreateResponse(HttpStatusCode.OK, true); 
    } 

Это будет работать, если на контроллере счета, но не на контроллере плитки.

Еще одна вещь, я использую «Community» выпуск Visual Studio и Windows, 8,1

+0

Возможно, ваш браузер кэшировал ответ ... вы можете попробовать установить параметр «cache: false», если вы используете jquery для отправки запроса AJAX. – nemesv

+0

Можете ли вы поделиться определениями своих методов действий (включая любые атрибуты)? Я предполагаю, что вы подтвердили, что запрос действительно подходит к правильному URL (т. Е. Это не проблема на стороне клиента)? –

+0

nemesv - когда я переключаю контроллер на «учетную запись», вызов выполняется успешно, поэтому он не может быть проблемой кэширования. Ant - будет делать. Все вызовы являются относительными, и если я изменяю документ по умолчанию, возвращается новый по умолчанию. –

ответ

0

Это не проблема, которая, вероятно, происходят часто, но я решил ее и понял, я бы разместить его здесь, в дело в том, что у кого-то еще такая же проблема.

Я использую web api в контексте стандартного приложения для веб-форм (хотя я использую только веб-формы для своих страниц отчетов). В web.config для приложения веб-форм вы можете объявить пути, к которым пользователь имеет доступ до аутентификации. Я только предоставлял доступ к контроллеру учетной записи: все остальные не были разрешены из-за моего механизма аутентификации. Как только я аутентифицирую (например, вызов проверки подлинности форм), или если я изменю путь местоположения, чтобы включить только «api», проблема исчезнет.

0

У меня была такая же проблема, но в другом контексте. Имелось много контроллеров и соответствующих шаблонов маршрутизации. Только один контроллер отвечал на запросы. Позже я понял, что мои другие классы контроллеров не были общественностью !!

Смежные вопросы