.NET HttpClient วิธีการโพสต์ค่าสตริง?


174

ฉันจะสร้างโดยใช้ C # และ HttpClient ตามคำขอ POST ต่อไปนี้ได้อย่างไร: User-Agent: Fiddler Content-type: application / x-www-form-urlencoded โฮสต์: localhost: 6740 ความยาวเนื้อหา: 6

ฉันต้องการคำขอดังกล่าวสำหรับบริการ WEB API ของฉัน:

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

1
คุณใช้ไคลเอนต์ HTTP ใดในภาพ
กำมะถัน


1
บริการคือ Web Api MVC รูปแบบ JSONสำหรับการร้องขอ?
Kiquenet

คำตอบ:


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
hm, HttpClientExtensions ของฉันไม่มีโอเวอร์โหลดดังกล่าว ... ฉันใช้ framework 4.0
Ievgen Martynov

1
โอเวอร์โหลดตัวใดที่คุณไม่มี ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งMicrosoft.AspNet.WebApi.ClientNuGet ในโครงการของคุณ HttpClientชั้นถูกสร้างขึ้นใน .NET 4.5 ไม่ได้อยู่ใน .NET 4.0 หากคุณต้องการใช้งานใน. NET 4.0 คุณต้องใช้ NuGet!
ดารินทร์ดิมิทรอฟ

1
แรก C # SSSCE ฉันเจอ ราวกับว่ามันเป็นเรื่องง่ายที่จะทำให้มันทำงานถ้าคุณมาจากภาษาที่มี IDE ที่เหมาะสม
บัฟฟาโล่

13
เพียงทราบว่าการใช้ HttpClient ในการใช้คำสั่งเป็นข้อผิดพลาด
ren

26
คุณควรเป็นส่วนตัวคงที่แบบอ่านอย่างเดียว HttpClient _client = new HttpClient (); แทนaspnetmonsters.com/2016/08/2016-08-27-httpclientwrong
Sameer Alibhai

35

ด้านล่างเป็นตัวอย่างการโทรแบบซิงโครนัส แต่คุณสามารถเปลี่ยนเป็น async ได้อย่างง่ายดายโดยใช้ waitit-sync:

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
ฉันไม่คิดว่ามันจะใช้ได้ คุณควรแทนที่ "login" ด้วยสตริงว่างมันควรเป็น KeyValuePair <string, string> ("", "abc") ดูคำตอบที่ยอมรับ
joedotnot

สิ่งนี้ใช้งานได้สำหรับฉันทำงานบน webservice php ที่เรียก $ company_id = $ _POST ("company_id"); เช่นนั้น. ถ้าฉันส่งเป็น json, php ไม่สามารถทำงานได้
teapeng

8

มีบทความเกี่ยวกับคำถามของคุณในเว็บไซต์ asp.net ฉันหวังว่ามันจะช่วยคุณได้

วิธีการเรียก api ด้วย asp net

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

นี่คือส่วนเล็ก ๆ จากส่วน POST ของบทความ

รหัสต่อไปนี้ส่งคำขอ 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;
}

คำร้องขอเป็นแบบฟอร์ม urlencoded ดังนั้นฉันจึงไม่คิดว่า JSON จะใช้งานได้
ChrisFletcher

มันฟอร์ม urlencoded มีรูปแบบ JSONสำหรับDateTimeคุณสมบัติหรือไม่ ปัญหาการทำให้เป็นอันดับ
Kiquenet

4
ฉันดูเหมือนจะไม่สังเกตเห็นวิธีการของคุณ "PostAsJsonAsync" ไม่มีในอินสแตนซ์ HttpClient ของฉัน
Tommy Holman

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 ควรมีค่าที่เว็บเซอร์วิสของคุณส่งคืน


25
คำถามที่นี่เป็นเรื่องเกี่ยวกับวิธีการใช้ใหม่และไม่เก่าHttpClient WebRequest
ดารินทร์ดิมิทรอฟ

จริงฉันไม่ได้สังเกตเห็นฉันจะออกจากโพสต์ต่อไปในกรณีที่มีคนต้องการคนเก่า ...
Axel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.