2014-11-06 4 views
1

я должен использовать рамки 4.0 для создания веб-API, но я не в состоянии сделать запрос:запросы Web API в 4.0 рамках

public class ChartDataApiController : ApiController 
{ 
    [HttpGet] 
    public List<ChartDatum> GetData(int lowerBound, int upperBound) 
    { 
     return new List<ChartDatum>(); 
    } 
} 

У меня есть это в тот момент, как раз, чтобы подтвердить, что я могу фактически ударил это действие. Запрос:

var url = window.location.protocol + "//" + window.location.host + "/api/ChartDataApi/GetData"; 
$.ajax({ 
    url: url, 
    type: "GET", 
    data: { 
     lowerBound: lowerBound, 
     upperBound: upperBound 
    }, 
    dataType: "json", 
    success: function(response) { 
     graph.draw(response); 
    }, 
    error: function(message) { 
     //error handler logic 
    } 
}); 

Я просто не могу попасть в это действие. Я попытался преобразовать его в POST, чтобы проверить, не могу ли я заставить его работать, но безрезультатно. Ошибка сервера дает 404 (пришлось изменить, чтобы представить):

GET HTTP: // (URL): порт #/апи/ChartDataApi/GetData LowerBound = 0 & UpperBound = 29 404 (не найдено)

Я могу сделать запрос очень хорошо, пока я не пытаюсь передать какие-либо параметры ни через строку запроса, ни через тело запроса. Я также попробовал префикс параметров с атрибутом [FromUri], но это также не сработало.

Вот веб-апи маршрут конфигурации (просто по умолчанию):

public static void Register(HttpConfiguration config) 
{ 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{id}", 
     defaults: new { id = RouteParameter.Optional } 
    ); 
} 

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

ответ

2

Вы запрашиваете неправильный адрес. В вашем случае вы должны отправить запрос GET на конечную точку /api/ChartDataApi.

HttpGetAttribute, примененный к методу GetData, просто указывает, что этот метод отвечает за зависание HTTP GET запросов; нет необходимости явно указывать имя метода GetData в URI запроса.

+0

Значит, вы не можете ссылаться на действия по имени в 4.0? Я знаю, что это возможно в версии 4.5, но не знал, что это не выполнимо в 4.0. Я хотел бы иметь несколько действий GET на этом контроллере, если это возможно. EDIT: после попытки удалить имя действия, я получаю ту же ошибку. Даже переименовал действие в «Получить». – jokulmorder

+0

, который кажется правильным ... Я помню, что маршрутизация улучшалась между 4.0 и 4.5 для MVC. Думаю, вам придется использовать аннотации метаданных/данных (или просто «атрибуты») больше в 4.0 –

+0

. Это различие на самом деле то, что повернуло меня отключение к разработке apis с использованием маршрутизации MVC .. было намного чище и проще просто добавить страницу IHttpHandler или HttpModule и зарегистрировать файл в качестве поставщика маршрута. Это, по сути, то, что инфраструктура делает за кулисами, если я правильно помню. .. в webforms, это все еще мой метод. –