Type complexe est d'obtenir la valeur null dans un ApiController paramètre
Je ne sais pas pourquoi mon paramètre "ParametroFiltro Filtro" est trop nul, les autres paramètres "page" et "pageSize" est de se OK.
public class ParametroFiltro
{
public string Codigo { get; set; }
public string Descricao { get; set; }
}
Mon ApiController méthode Get:
public PagedDataModel<ParametroDTO> Get(ParametroFiltro Filtro, int page, int pageSize)
Mon appel ajax:
var fullUrl = "/api/" + self.Api;
$.ajax({
url: fullUrl,
type: 'GET',
dataType: 'json',
data: { Filtro: { Codigo: '_1', Descricao: 'TESTE' }, page: 1, pageSize: 10 },
success: function (result) {
alert(result.Data.length);
self.Parametros(result.Data);
}
});
Vous devez vous connecter pour publier un commentaire.
Vous essayez d'envoyer un objet complexe avec
GET
méthode. La raison de cet échec est queGET
méthode ne peut pas avoir un corps et toutes les valeurs sont codées dans l'URL. Vous pouvez faire ce travail en utilisant[FromUri]
, mais d'abord, vous avez besoin de changer votre côté client code:De cette façon
[FromUri]
seront en mesure de ramasser votre complexe de propriétés de l'objet directement à partir de l'URL si vous changez votre méthode d'action comme ceci:Votre approche précédente préfèrent travailler avec
POST
méthode qui peut avoir un corps (mais vous auriez encore besoin d'utiliserJSON.stringify()
de format de corps comme JSON).[FromUri]
est tout ce que j'avais! Étrange qu'il doit même y explicitement... je pense API Web suppose qu'il est dans l'Uri puisque c'est unGET
$.ajax({ url: "http://localhost:25237/api/Plant", type: 'GET', dataType: 'json', data: { Sort: "Name", Filter: {Sort: "Name"} }, success: function (result) { alert(result.data.length); } });
public ApiResult<List<Plant>> Get([FromUri] PlantFilter filter, string sort)
Sur le serveur,sort
seraient remplis, mais pasfilter.sort
: filtre.tri = "", tri = "Nom".http://localhost:58869/api/complextype/getcomplextypewithprefix?Sort=Name&Filter[Sort]=Description
qui j'ai été en mesure de lier correctement avec les mesures ci-dessous:public string GetComplexTypeWithPrefix([FromUri]PlantFilter filter, string sort) { return "test"; }
Veuillez me joindre par e-mail afin que nous puissions travailler sur cela plus loin.post
solution de cette réponse, quelque chose comme[ActionName("Search")] [HttpPost] public ApiResult<List<Plant>> Search(PlantFilter filter)
Fournir les
contentType
propriété lorsque vous faites l'appel ajax. UtilisationJSON.stringify
méthode pour construire les données JSON à la poste. modifier le type dePOST
et la liaison de Modèle MVC va lier les données publiées à votre objet de classe.Si vous ajoutez des données json à la chaîne de requête, et de l'analyser plus tard dans l'api web de côté. vous pouvez analyser objet complexe aussi. Il est utile plutôt que de poster objet json, espeicaly dans certains httpget exigence des cas.
Il est également possible d'accéder à des variables POST via un Newtonsoft.Json.Linq JObject.
Par exemple, ce POST:
Peut être consulté dans un APIController comme suit:
Update
, j'ai besoin deGet
basé sur un hypothétique objet complexe avec toutes ses propriétés.