.NET HttpClient POST स्ट्रिंग मान कैसे?


174

मैं निम्नलिखित पोस्ट अनुरोध C # और HttpClient का उपयोग करके कैसे बना सकता हूं: उपयोगकर्ता-एजेंट: फ़िडलर सामग्री-प्रकार: अनुप्रयोग / x-www-form-urlencoded होस्ट: स्थानीय होस्ट: 6740 सामग्री-लंबाई: 6

मुझे मेरी वेब एपीआई सेवा के लिए इस तरह के अनुरोध की आवश्यकता है:

[ActionName("exist")]
[HttpPost]
public bool CheckIfUserExist([FromBody] string login)
{           
    return _membershipProvider.CheckIfExist(login);
}

1
आप इमेज में किस HTTP क्लाइंट का उपयोग कर रहे हैं?
— गंधक


1
सेवा वेब एप एमवीसी है। अनुरोध के लिए JSON प्रारूप ?
— किकेनेट

जवाबों:


433
using System;
using System.Collections.Generic;
using System.Net.Http;

class Program
{
    static void Main(string[] args)
    {
        Task.Run(() => MainAsync());
        Console.ReadLine();
    }

    static async Task MainAsync()
    {
        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:6740");
            var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("", "login")
            });
            var result = await client.PostAsync("/api/Membership/exists", content);
            string resultContent = await result.Content.ReadAsStringAsync();
            Console.WriteLine(resultContent);
        }
    }
}

1
हम्म, मेरे HttpClientExtensions में ऐसा अधिभार नहीं है ... मैं फ्रेमवर्क 4.0 का उपयोग करता हूं
— Ievgen Martynov

1
आपके पास कौन सा अधिभार नहीं है? सुनिश्चित करें कि आपने Microsoft.AspNet.WebApi.Clientअपने प्रोजेक्ट में NuGet इंस्टॉल कर लिया है । HttpClientवर्ग .NET 4.0 में नहीं .NET 4.5 में बनाया गया है,। यदि आप इसे .NET 4.0 में उपयोग करना चाहते हैं, तो आपको NuGet की आवश्यकता है!
— डारिन दिमित्रोव

1
पहले C # SSSCE मैं भर आया। मानो यह एक ऐसी हवा थी कि अगर आप एक उचित IDE के साथ एक भाषा से आ रहे हैं तो इसे चलाने के लिए।
— भैंस

13
बस एक ध्यान दें कि कथन का उपयोग में HttpClient का उपयोग कर एक है गलती
— ren

26
आपको निजी स्थिर रीडिंग HttpClient _client = new HttpClient () चाहिए; इसके बजाय aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong
— समीर

35

नीचे उदाहरण के लिए सिंक्रोनस कॉल करने के लिए है, लेकिन आप आसानी से प्रतीक्षारत-सिंक का उपयोग करके एसिंक्स में बदल सकते हैं:

var pairs = new List<KeyValuePair<string, string>>
            {
                new KeyValuePair<string, string>("login", "abc")
            };

var content = new FormUrlEncodedContent(pairs);

var client = new HttpClient {BaseAddress = new Uri("http://localhost:6740")};

    // call sync
var response = client.PostAsync("/api/membership/exist", content).Result; 
if (response.IsSuccessStatusCode)
{
}

1
मुझे नहीं लगता कि यह काम करेगा। आपको खाली स्ट्रिंग के साथ "लॉगिन" को बदलना चाहिए, यह KeyValuePair <string, string> ("", "abc") होना चाहिए, स्वीकृत उत्तर देखें।
— joedotnot

यह मेरे लिए काम करता है, php webservice पर काम करता है जो $ company_id = $ _POST ("company_id") को कॉल कर रहा है; उसके जैसा। अगर मैं json के रूप में भेजता हूं, तो php काम नहीं कर सकता है।
— teapeng

8

Asp.net की वेबसाइट पर आपके प्रश्न के बारे में एक लेख है। उम्मीद है यह आपकी मदद कर सकता है।

एस्प नेट के साथ एपी को कैसे कॉल करें

http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client

यहां लेख के POST अनुभाग से एक छोटा सा हिस्सा है

निम्न कोड एक पोस्ट अनुरोध भेजता है जिसमें JSON प्रारूप में एक उत्पाद उदाहरण शामिल है:

// HTTP POST
var gizmo = new Product() { Name = "Gizmo", Price = 100, Category = "Widget" };
response = await client.PostAsJsonAsync("api/products", gizmo);
if (response.IsSuccessStatusCode)
{
    // Get the URI of the created resource.
    Uri gizmoUrl = response.Headers.Location;
}

अनुरोध फॉर्म-यूरेलोडेड है इसलिए मुझे नहीं लगता कि JSON काम करेगा
— क्रिसफ्लेचर

यह फॉर्म-यूरेलनकोडेड है । वैसे भी, गुणों के लिए JSON प्रारूपDateTime ? क्रमांकन मुद्दे?
— किकेनेट

4
मुझे आपकी विधि "PostAsJsonAsync" नज़र नहीं आती, यह मेरे HttpClient उदाहरण में उपलब्ध नहीं है।
— टॉमी होल्मन

4

यहाँ मैं इस लेख जो का उपयोग कर पोस्ट अनुरोध भेज रहा है पाया JsonConvert.SerializeObject()और StringContent()करने के लिए HttpClient.PostAsyncडेटा

static async Task Main(string[] args)
{
    var person = new Person();
    person.Name = "John Doe";
    person.Occupation = "gardener";

    var json = Newtonsoft.Json.JsonConvert.SerializeObject(person);
    var data = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");

    var url = "https://httpbin.org/post";
    using var client = new HttpClient();

    var response = await client.PostAsync(url, data);

    string result = response.Content.ReadAsStringAsync().Result;
    Console.WriteLine(result);
}

1

आप ऐसा कुछ कर सकते हैं

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:6740/api/Membership/exist");

req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";         
req.ContentLength = 6;

StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(strRequest);
streamOut.Close();
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close();

और फिर strReponse में आपके webservice द्वारा लौटाए गए मान शामिल होने चाहिए


25
यहां सवाल यह था कि नए का उपयोग कैसे किया जाए HttpClientऔर पुराने का नहीं WebRequest।
— डारिन दिमित्रोव

यह सच है कि मैंने ध्यान नहीं दिया, मैं किसी भी तरह से किसी को पुराने की जरूरत होने पर पद छोड़ दूँगा ...
— एक्सल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.