[Javascript] किसी ऑब्जेक्ट के रूप में वेब एपीआई विधि में जेसन पोस्ट डेटा कैसे पास करें?



Answers

वेबपी में पोस्ट के साथ काम करना मुश्किल हो सकता है! पहले से ही सही उत्तर में जोड़ना चाहते हैं ..

जीईटी से निपटने के रूप में विशेष रूप से POST पर ध्यान केंद्रित करेंगे। मुझे नहीं लगता कि कई वेबपिस के साथ जीईटी के साथ किसी समस्या को हल करने के लिए चारों ओर खोज करेंगे। वैसे भी ..

यदि आपका प्रश्न है - एमवीसी वेब एपीआई में, कैसे - सामान्य जेनेरिक HTTP क्रियाओं के अलावा कस्टम एक्शन विधि नामों का उपयोग करें? - एकाधिक पोस्ट करें? - कई सरल प्रकार पोस्ट करें? - jQuery के माध्यम से पोस्ट जटिल प्रकार?

फिर निम्नलिखित समाधान मदद कर सकते हैं:

सबसे पहले, वेब एपीआई में कस्टम एक्शन विधियों का उपयोग करने के लिए, एक वेब एपीआई रूट जोड़ें:

public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "ActionApi",
        routeTemplate: "api/{controller}/{action}");
}

और फिर आप क्रिया विधियां बना सकते हैं जैसे:

[HttpPost]
public string TestMethod([FromBody]string value)
{
    return "Hello from http post web api controller: " + value;
}

अब, अपने ब्राउज़र कंसोल से निम्नलिखित jQuery को आग

$.ajax({
    type: 'POST',
    url: 'http://localhost:33649/api/TestApi/TestMethod',
    data: {'':'hello'},
    contentType: 'application/x-www-form-urlencoded',
    dataType: 'json',
    success: function(data){ console.log(data) }
});

दूसरा, एकाधिक पदों को करने के लिए, यह आसान है, कई क्रिया विधियों को बनाएं और [HttpPost] attrib के साथ सजाने के लिए। कस्टम नाम असाइन करने के लिए [ActionName ("MyAction")] का उपयोग करें, आदि नीचे चौथे बिंदु पर jQuery पर आ जाएगा

तीसरा, सबसे पहले, एक ही कार्रवाई में एकाधिक सरल प्रकार पोस्ट करना संभव नहीं है। इसके अलावा, एक साधारण प्रारूप भी पोस्ट करने के लिए एक विशेष प्रारूप है (क्वेरी स्ट्रिंग या आरईएसटी शैली में पैरामीटर को पार करने के अलावा)। यह वह बिंदु था जिसने मुझे अपने ग्राहकों को आराम क्लाइंट (जैसे फिडलर और क्रोम के उन्नत आरईएसटी क्लाइंट एक्सटेंशन) के साथ टक्कर लगी और लगभग 5 घंटे तक वेब पर शिकार किया, अंत में, निम्नलिखित यूआरएल मदद की साबित हुई। लिंक के लिए प्रासंगिक सामग्री उद्धृत कर सकते हैं मृत हो सकता है!

Content-Type: application/x-www-form-urlencoded
in the request header and add a = before the JSON statement:
={"Name":"Turbo Tina","Email":"na@Turbo.Tina"}

पीएस: असाधारण वाक्यविन्यास नोटिस ?

http://forums.asp.net/t/1883467.aspx?The+received+value+is+null+when+I+try+to+Post+to+my+Web+Api

वैसे भी, हमें उस कहानी को खत्म करने दें। आगे बढ़ते रहना:

चौथा, jQuery के माध्यम से जटिल प्रकार पोस्ट करना , संभोग, $ .ajax () तुरंत भूमिका में आ जाएगा:

आइए हम कहें कि एक्शन विधि किसी व्यक्ति ऑब्जेक्ट को स्वीकार करती है जिसमें एक आईडी और नाम होता है। तो, जावास्क्रिप्ट से:

var person = { PersonId:1, Name:"James" }
$.ajax({
    type: 'POST',
    url: 'http://mydomain/api/TestApi/TestMethod',
    data: JSON.stringify(person),
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function(data){ console.log(data) }
});

और कार्रवाई इस तरह दिखेगी:

[HttpPost]
public string TestMethod(Person person)
{
    return "Hello from http post web api controller: " + person.Name;
}

उपरोक्त सभी, मेरे लिए काम किया !! चीयर्स!

Question

एएसपी.नेट एमवीसी 4 वेब एपीआई एप्लिकेशन ग्राहक को बचाने के लिए पोस्ट विधि को परिभाषित करता है। POST अनुरोध निकाय में ग्राहक जेसन प्रारूप में पारित किया गया है। पोस्ट विधि में ग्राहक पैरामीटर में गुणों के लिए शून्य मान होते हैं।

इसे कैसे ठीक करें ताकि पोस्ट किया गया डेटा ग्राहक ऑब्जेक्ट के रूप में पारित हो जाए?

यदि संभव हो तो सामग्री-प्रकार: एप्लिकेशन / एक्स-www-form-urlencoded का उपयोग किया जाना चाहिए क्योंकि मुझे नहीं पता कि जावास्क्रिप्ट विधि में इसे कैसे बदलना है, जो पोस्ट फॉर्म हैं।

नियंत्रक:

public class CustomersController : ApiController {

  public object Post([FromBody] Customer customer)
        {
            return Request.CreateResponse(HttpStatusCode.OK,
            new
            {
                customer = customer
            });
        }
    }
}

public class Customer
    {
        public string company_name { get; set; }
        public string contact_name { get; set; }
     }

निवेदन:

POST http://localhost:52216/api/customers HTTP/1.1
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

{"contact_name":"sdfsd","company_name":"ssssd"}



माइक्रोसॉफ्ट ने ऐसा करने का एक अच्छा उदाहरण दिया:

https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part-1

पहले अनुरोध को मान्य करें

if (ModelState.IsValid)

और धारावाहिक डेटा का उपयोग करने के बजाय।

Content = new StringContent(update.Status)

यहां 'स्थिति' जटिल प्रकार में एक फ़ील्ड है। Serializing .NET द्वारा किया जाता है, इसके बारे में चिंता करने की कोई आवश्यकता नहीं है।




जेएसओएन प्रारूप में स्ट्रिंग प्राप्त करने के लिए JSON.stringify () का उपयोग करें, सुनिश्चित करें कि AJAX कॉल करते समय आप नीचे दिए गए गुणों को पार करते हैं:

  • सामग्री टाइप: 'एप्लिकेशन / जेसन'
  • डेटा टाइप: 'जेसन'

एएसएफ़एक्स वेब एपीआई को AJAX पोस्ट कॉल करने के लिए नीचे दिए गए jquery कोड को दिया गया है:

var product =
    JSON.stringify({
        productGroup: "Fablet",
        productId: 1,
        productName: "Lumia 1525 64 GB",
        sellingPrice: 700
    });

$.ajax({
    URL: 'http://localhost/api/Products',
    type: 'POST',
    contentType: 'application/json',
    dataType: 'json',
    data: product,
    success: function (data, status, xhr) {
        alert('Success!');
    },
    error: function (xhr, status, error) {
        alert('Update Error occurred - ' + error);
    }
});




जेएसएल प्रारूप में डेटा वापस करने के लिए कोड के बाद, xml -Web API 2 के बजाय: -

Global.asax फ़ाइल में निम्न पंक्ति डालें

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
        GlobalConfiguration.Configuration.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);



Links