Запросы веб-API в рамках 4.0

1

Я должен использовать фреймворк 4.0 для создания веб-API, но я не могу сделать запрос:

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): порт #/api/ChartDataApi/GetData? LowerBound = 0 & upperBound = 29 404 (не найдено)

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

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

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

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

Теги:
asp.net-mvc
asp.net-4.0

1 ответ

2
Лучший ответ

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

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

  • 0
    Таким образом, вы не можете ссылаться на действия по имени в 4.0? Я знаю, что это возможно в 4.5, но не знал, что это невозможно в 4.0. Я хотел бы иметь несколько действий GET на этом контроллере, если это возможно. РЕДАКТИРОВАТЬ: после попытки удалить имя действия, я получаю ту же ошибку. Даже переименовал акцию в «Получить».
  • 0
    это кажется правильным ... Я вспоминаю улучшение маршрутизации между 4.0 и 4.5 для MVC. Я думаю, вам придется использовать метаданные / аннотации данных (или просто "атрибуты") в 4.0
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню