.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.