c# - एपीकंट्रोलर पैरामीटर में जटिल प्रकार शून्य हो रहा है




ajax json (3)

आप GET विधि के साथ एक जटिल वस्तु भेजने की कोशिश कर रहे हैं। यह असफल होने का कारण यह है कि GET विधि में कोई शरीर नहीं हो सकता है और सभी मान URL में एन्कोड किए जा रहे हैं। आप [FromUri] का उपयोग करके यह काम कर सकते हैं, लेकिन पहले आपको अपने क्लाइंट साइड कोड को बदलने की आवश्यकता है:

$.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);
    }
});

इस तरह से [FromUri] यूआरएल से सीधे अपनी जटिल ऑब्जेक्ट गुणों को चुनने में सक्षम होगा यदि आप अपनी एक्शन विधि बदलते हैं:

public PagedDataModel<ParametroDTO> Get([FromUri]ParametroFiltro Filtro, int page, int pageSize)

आपका पिछला दृष्टिकोण POST विधि के साथ काम करेगा जिसमें शरीर हो सकता है (लेकिन आपको अभी भी JSON.stringify() को JSON के रूप में स्वरूपित करने के लिए उपयोग करना होगा)।

मुझे नहीं पता कि मेरा पैरामीटर "पैरामैट्रोफिल्टरो फिल्ट्रो" शून्य क्यों हो रहा है, अन्य पैरामीटर "पेज" और "पेज साइज" ठीक हो रहा है।

public class ParametroFiltro
{
    public string Codigo { get; set; }
    public string Descricao { get; set; }
}

मेरा एपीकंट्रोलर विधि प्राप्त करें:

public PagedDataModel<ParametroDTO> Get(ParametroFiltro Filtro, int page, int pageSize)

मेरा अजैक्स कॉल:

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);
    }
});

यदि आप क्वेरी स्ट्रिंग के लिए जेसन डेटा जोड़ते हैं, और इसे बाद में वेब एपीआई पक्ष में पार्स करें। आप जटिल वस्तु को भी पार्स कर सकते हैं। यह कुछ विशेष httpget आवश्यकता मामले में जेसन ऑब्जेक्ट, espeicaly पोस्ट करने के बजाय उपयोगी है।

//javascript file 
    var data = { UserID: "10", UserName: "Long", AppInstanceID: "100", ProcessGUID: "BF1CC2EB-D9BD-45FD-BF87-939DD8FF9071" };
    var request = JSON.stringify(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);
        string userName = queryJson.UserName.Value;
    }

    //utility function:
    public static dynamic ParseHttpGetJson(string query)
    {
        if (!string.IsNullOrEmpty(query))
        {
            try
            {
                var json = query.Substring(7, query.Length - 7); //seperate ?data= characters
                json = System.Web.HttpUtility.UrlDecode(json);
                dynamic queryJson = JsonConvert.DeserializeObject<dynamic>(json);

                return queryJson;
            }
            catch (System.Exception e)
            {
                throw new ApplicationException("can't deserialize object as wrong string content!", e);
            }
        }
        else
        {
            return null;
        }
    }

Newtonsoft.Json.Linq JObject के माध्यम से POST चर का उपयोग करना भी संभव है।

उदाहरण के लिए, यह पोस्ट:

$.ajax({
    type: 'POST',
    url: 'URL',
    data: { 'Note': note, 'Story': story },
    dataType: 'text',
    success: function (data) { }
});

एक एपीकंट्रोलर में इस तरह से पहुंचा जा सकता है:

public void Update([FromBody]JObject data)
{
    var Note = (String)data["Note"];
    var Story = (String)data["Story"];
}




asp.net-web-api