Je ne sais pas pourquoi mon paramètre “ParametroFiltro Filtro” devient nul, les autres parameters “page” et “pageSize” sont corrects.
public class ParametroFiltro { public ssortingng Codigo { get; set; } public ssortingng Descricao { get; set; } }
Mon ApiController Obtenir la méthode:
public PagedDataModel 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 essayez d’envoyer un object complexe avec la méthode GET
. La raison pour laquelle cela échoue est que la méthode GET
ne peut pas avoir de corps et que toutes les valeurs sont encodées dans l’URL. Vous pouvez faire cela en utilisant [FromUri]
, mais vous devez d’abord changer votre code côté client:
$.ajax({ url: fullUrl, type: 'GET', dataType: 'json', data: { Codigo: '_1', Descricao: 'TESTE', page: 1, pageSize: 10 }, success: function (result) { alert(result.Data.length); self.Parametros(result.Data); } });
De cette façon, [FromUri]
pourra récupérer vos propriétés d’object complexes directement à partir de l’URL si vous modifiez votre méthode d’action comme ceci:
public PagedDataModel Get([FromUri]ParametroFiltro Filtro, int page, int pageSize)
Votre approche précédente fonctionnerait plutôt avec la méthode POST
qui peut avoir un corps (mais vous devrez JSON.ssortingngify()
utiliser JSON.ssortingngify()
pour formater le corps en tant que JSON).
Fournissez la propriété contentType
lorsque vous effectuez l’appel ajax. Utilisez la méthode JSON.ssortingngify
pour générer les données JSON à publier. modifiez le type en POST
et la liaison de modèle MVC liera les données publiées à votre object de classe.
var filter = { "Filtro": { "Codigo": "_1", "Descricao": "TESTE" }, "page": "1", "pageSize": "10" }; $.ajax({ url: fullUrl, type: 'POST', dataType: 'json', contentType: 'application/json', data: JSON.ssortingngify(filter), success: function (result) { alert(result.Data.length); self.Parametros(result.Data); } });
Si vous ajoutez des données json à une chaîne de requête, et parsingz-la ultérieurement du côté Web Api. vous pouvez aussi parsingr un object complexe. C’est utile plutôt que de poster un object json, en particulier dans un cas particulier d’exigence httpget.
//javascript file var data = { UserID: "10", UserName: "Long", AppInstanceID: "100", ProcessGUID: "BF1CC2EB-D9BD-45FD-BF87-939DD8FF9071" }; var request = JSON.ssortingngify(data); request = encodeURIComponent(request); doAjaxGet("/ProductWebApi/api/Workflow/StartProcess?data=", request, function (result) { window.console.log(result); }); //webapi file: [HttpGet] public ResponseResult StartProcess() { dynamic queryJson = ParseHttpGetJson(Request.RequestUri.Query); int appInstanceID = int.Parse(queryJson.AppInstanceID.Value); Guid processGUID = Guid.Parse(queryJson.ProcessGUID.Value); int userID = int.Parse(queryJson.UserID.Value); ssortingng userName = queryJson.UserName.Value; } //utility function: public static dynamic ParseHttpGetJson(ssortingng query) { if (!ssortingng.IsNullOrEmpty(query)) { try { var json = query.Subssortingng(7, query.Length - 7); //seperate ?data= characters json = System.Web.HttpUtility.UrlDecode(json); dynamic queryJson = JsonConvert.DeserializeObject(json); return queryJson; } catch (System.Exception e) { throw new ApplicationException("can't deserialize object as wrong ssortingng content!", e); } } else { return null; } }
Il est également possible d’accéder aux variables POST via un Newtonsoft.Json.Linq JObject.
Par exemple, ce POST:
$.ajax({ type: 'POST', url: 'URL', data: { 'Note': note, 'Story': story }, dataType: 'text', success: function (data) { } });
Peut être accédé dans un APIController comme ceci:
public void Update([FromBody]JObject data) { var Note = (Ssortingng)data["Note"]; var Story = (Ssortingng)data["Story"]; }