Sto imparando come utilizzare la risorsa $ di AngularJS per chiamare un backend Web Api. Voglio passare una gerarchia di oggetti come criterio e recuperare un IEnumerable<Program>
. Ecco un esempio dei criteri:
$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}
]
}
]
}
Ho gli stessi oggetti definiti sul server in 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; }
}
Ecco come Sto configurando $ risorsa:
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' })
};
}
]);
E mi chiamano così:
api.Program.query({ criteria: $scope.criteria }, function (response) {
$scope.programs = response;
});
Non importa quello che provo io o ottenere null
come parametro di criteri o l'azione non viene eseguita affatto. Non so se il problema è in angolare, web api o entrambi. Ecco l'azione:
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.
}
}
Qualcuno può aiutarmi a ottenere un esempio di lavoro in corso per la ricerca e la restituzione dei prodotti che utilizzano AngularJS $ risorse e Web Api?
Quindi, se ho creato una nuova azione a $ risorsa che fa un post e preso [FromUri] off il parametro, si prenderà cura di esso senza che io debba creare un modello personalizzato? – adam0101
Il raccoglitore modello predefinito cerca JSON nel corpo della richiesta. '$ resource' è RESTful e invia JSON nella stringa di query. La mancata corrispondenza è il motivo per cui è necessario utilizzare un modello di rilegatura o utilizzare '$ http'. – Romoku
Aspetta, sono confuso. È possibile specificare una nuova azione su $ resource con un metodo di 'POST' in base alla documentazione. Stai dicendo che lo ignora e lo inserisce comunque nel querystring? – adam0101