Я должен использовать фреймворк 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 и думаю, что это может быть разница между структурами.
Вы запрашиваете неправильный ресурс. В вашем случае вы должны /api/ChartDataApi
запрос GET
в /api/ChartDataApi
точку /api/ChartDataApi
.
HttpGetAttribute
применяемый к методу GetData
просто указывает, что этот метод отвечает за запросы HTTP GET
для подключения HTTP GET
; нет необходимости явно указывать имя метода GetData
в URI запроса.