Я пытаюсь вызвать метод WebApi из функции angularjs $ http. Я пробовал использовать стандартный запрос get, query и action, но меня исправило, поняв, что вы не можете передать объект с Get. Поэтому я использую Post. Web Api вызывается и возвращает ожидаемое значение. Однако угловая сторона не получает значения. Вот последняя, которая не работает:
WebAPI
[RoutePrefix("api/frequentpawner")]
public class FrequentPawnerController : ApiController
{
[HttpPost]
public HttpResponseMessage Post([FromBody] FrequentPawnerReportCriteria criteria)
{
var repo = new FrequentPawnerReport();
var result = repo.GetReport(criteria);
var httpResult = new HttpResponseMessage(HttpStatusCode.OK);
var jsonMediaTypeFormatter = new JsonMediaTypeFormatter
{
SerializerSettings =
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
}
};
httpResult.Content = new ObjectContent<List<FrequentPawnerReport>>(result, jsonMediaTypeFormatter);
return httpResult;
}
function getFrequentPawner(criteria) {
return $http.post("/api/FrequentPawner/Post", criteria)
.then (getFrequentPawnerComplete)
.catch(getFrequentPawnerFailed);
function getFrequentPawnerComplete(response) {
var x = response.data;
return response.data.results;
}
function getFrequentPawnerFailed(error) {
alert("XHR failed for frequent pawner report: " + error.responseText);
}
}
объект критериев:
vm.criteria = {maxResults: 25, startDate: new Дата (2014, 10, 1), endDate: новая Дата (2014, 11, 1), isActive: true, transTypeId: 1, юрисдикции: [], reportType: 1, Отношение: 1, make: '', propertyGroupId: 0, propertyTypeId: 0, jurisCount: 0, storeCount: 0, useTypePawn: false, useTypeScrap: false}
Любые идеи приветствуются.
Я вижу несколько ошибок в вашем коде.
ваш метод возврата метода get, поэтому здесь 'get': {method: 'GET', isArray: false },
флаг isArray должен быть правдой, иначе вы получите ошибку от углового, когда получите ответ.
ваш метод Get без параметров, поэтому, возможно, вам нужно что-то вроде
public IEnumerable<string> Get(FrequentPawnerReportCriteria criteria)
вы путаете методы Get и Post. Поэтому, возможно, это действие FrequentPawnerReport
должно быть сообщением и возвращать только один объект.
public FrequentPawnerReport Post([FromBody] FrequentPawnerReportCriteria criteria)
{
var repo = new FrequentPawnerReport();
return repo.GetReport(criteria);
}
IEnumerable<FrequentPawnerReport> Get
если вы возвращаете коллекцию - почему здесь'get' : {method: 'GET', isArray: false },
вы устанавливаете флаг isArray в false ?