Uczę się, jak korzystać z zasobów $ AngularJS, aby wywoływać backend Web Api. Chcę przekazać hierarchię obiektów jako kryteria i odzyskać IEnumerable<Program>
. Oto przykład kryteriów:
$scope.criteria = {
Categories:[
{
Name: "Cat1",
Options: [
{Text: "Opt1", Value: true},
{Text: "Opt2", Value: false}
]
},
{
Name: "Cat2",
Options: [
{Text: "Opt3", Value: true},
{Text: "Opt4", Value: false}
]
}
]
}
Mam te same obiekty zdefiniowane na serwerze w języku C#.
public class CriteriaModel
{
public IEnumerable<CriteriaCategory> Categories { get; set; }
}
public class CriteriaCategory
{
public string Name { get; set; }
public IEnumerable<CriteriaOption> Options { get; set; }
}
public class CriteriaOption
{
public string Text { get; set; }
public bool Value { get; set; }
}
Oto jak ja konfigurowania $ resource:
angular.module('my.services')
.factory('api', [
'$resource',
function ($resource) {
return {
Profile: $resource('/api/profile/:id', { id: '@id' }),
Settings: $resource('/api/settings/:id', { id: '@id' }),
Program: $resource('/api/program/:id', { id: '@id' })
};
}
]);
A ja nazywam to tak:
api.Program.query({ criteria: $scope.criteria }, function (response) {
$scope.programs = response;
});
Bez względu na to, co staram I albo dostać null
jako parametr kryteriów lub akcja w ogóle nie działa. Nie wiem, czy problem jest w kanciastym, web api, czy w obu. Oto działanie:
public class ProgramController : ApiController
{
public IEnumerable<Program> GetByCriteria([FromUri]CriteriaModel criteria)
{
// Either criteria is null or this action doesn't even get
// executed depending on what I try.
}
}
Czy ktoś może mi pomóc dostać pracy przykład idzie do wyszukiwania i powrocie elementów za pomocą angularjs $ zasobów i Web API?
więc jeśli stworzył nową akcję w $ zasobu, który robi POST i zabrał [FromUri] off parametr, czy to zajmie się tym bez konieczności tworzenia niestandardowego spoiwa modelu? – adam0101
Domyślny segregator modelu szuka JSON w treści żądania. '$ resource' jest RESTful i wysyła JSON w ciągu zapytania. Niezgodność polega na tym, że musisz użyć segregatora modelowego lub użyć '$ http'. – Romoku
Czekaj, jestem zdezorientowany. Możesz określić nową akcję na $ resource za pomocą metody "POST" zgodnie z dokumentacją. Mówisz, że to ignoruje i umieszcza to w querystring? – adam0101