আমি কীভাবে আমার এইচটিটিপিপ্লায়েন্ট পোস্টএন্সিঙ্কের দ্বিতীয় প্যারামিটারের জন্য এইচটিটিপি কনটেন্ট সেট আপ করব?


260
public static async Task<string> GetData(string url, string data)
{
    UriBuilder fullUri = new UriBuilder(url);

    if (!string.IsNullOrEmpty(data))
        fullUri.Query = data;

    HttpClient client = new HttpClient();

    HttpResponseMessage response = await client.PostAsync(new Uri(url), /*expects HttpContent*/);

    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    response.EnsureSuccessStatusCode();
    string responseBody = await response.Content.ReadAsStringAsync();

    return responseBody;
}

আরও PostAsyncএকটি পরামিতি হওয়া দরকার HttpContent

আমি কীভাবে সেট আপ করব HttpContent? উইন্ডোজ ফোন 8 এর জন্য কাজ করে এমন কোনও ডকুমেন্টেশন নেই।

আমি যদি করি GetAsync, এটি দুর্দান্ত কাজ করে! তবে এটি কী = "ব্লে", কিছু = "ইয়ে" এর সামগ্রী সহ পোস্ট করা দরকার

// সম্পাদনা

উত্তরের জন্য অনেক ধন্যবাদ ... এটি ভালভাবে কাজ করে, তবে এখনও এখানে কয়েকটি অনিশ্চিত:

    public static async Task<string> GetData(string url, string data)
    {
        data = "test=something";

        HttpClient client = new HttpClient();
        StringContent queryString = new StringContent(data);

        HttpResponseMessage response = await client.PostAsync(new Uri(url), queryString );

        //response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        response.EnsureSuccessStatusCode();
        string responseBody = await response.Content.ReadAsStringAsync();

        return responseBody;
    }

ডেটা "টেস্ট = কিছু" আমি ধরে নিয়েছিলাম যে এপিআই পোস্ট পোস্ট ডেটা "টেস্ট" হিসাবে গ্রহণ করবে, সম্ভবত তা হয় না। অন্য বিষয়ে, আমার পোস্ট ডেটার মাধ্যমে পুরো অবজেক্ট / অ্যারে পোস্ট করার দরকার হতে পারে, তাই আমি ধরে নিচ্ছি যে জেসন এটি করা ভাল। আমি কীভাবে পোস্টের মাধ্যমে ডেটা পাব তার কোনও চিন্তাভাবনা?

সম্ভবত এর মতো কিছু:

class SomeSubData
{
    public string line1 { get; set; }
    public string line2 { get; set; }
}

class PostData
{
    public string test { get; set; }
    public SomeSubData lines { get; set; }
}

PostData data = new PostData { 
    test = "something",
    lines = new SomeSubData {
        line1 = "a line",
        line2 = "a second line"
    }
}
StringContent queryString = new StringContent(data); // But obviously that won't work

উত্তর:


161

এইচটিটিপি কনটেন্টের পাশাপাশি এই ব্লগ পোস্টে কীভাবে ব্যবহার করতে হয় তা খুঁজে পাওয়া যায় না এর উত্তরগুলির কয়েকটিতে এটির উত্তর দেওয়া হয়েছে

সংক্ষেপে, আপনি সরাসরি একটি উদাহরণ সেট আপ করতে পারবেন না HttpContentকারণ এটি একটি বিমূর্ত শ্রেণি । আপনার প্রয়োজনের উপর নির্ভর করে আপনার এটি থেকে উত্পন্ন একটি ক্লাস ব্যবহার করতে হবে। সম্ভবত StringContent, যা আপনাকে সাড়া, এনকোডিং এবং কনস্ট্রাক্টরে মিডিয়া টাইপের স্ট্রিং মান সেট করতে দেয়। দেখুন: http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent.aspx


2
আমি এটি পরীক্ষা করে দেখুন। আমার মনে হয় যখন আমি এটি সন্ধান করব তখন আমি এটি এমন কোনও জায়গায় রেখে যাব যেখানে প্রত্যেকে এটি দেখতে পাবে! এটি এখন 4 দিন ধরে চলেছে, একটি এপিআইতে সহজ REST পাওয়ার চেষ্টা করে।
Jimmyt1988

স্ট্রিংকন্টটি দুর্দান্ত কাজ করেছে, তবে বাস্তবে, পোস্টডাটাটি এখন যে সাইটে আমি কল করছি তা পেতে পারা যায় না: ডি। আমি বর্তমানে আমার কাছে যা আছে তা দেখানোর জন্য আমি প্রশ্ন সম্পাদনা করব
Jimmyt1988

2
"আমি কীভাবে আমার ক্লাসের জেএসএন পুনঃস্থাপন পোস্ট করব" এর একটি দ্রুত উত্তর হ'ল জেএসওন-নেটকে অবজেক্টটি জেনসোনকে সিরিয়ালাইজ করা হয়েছে ", তবে এটি সত্যিই একটি পৃথক প্রশ্নের অন্তর্গত।
প্রেস্টন গিলোট

92

প্রেস্টনের উত্তরে যুক্ত করতে, এখানে HttpContentস্ট্যান্ডার্ড লাইব্রেরিতে প্রাপ্ত উত্সভুক্ত ক্লাসগুলির সম্পূর্ণ তালিকা রয়েছে :

জমা

ক্রেডিট : https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-class-message-content/

একটি অনুমিত আছে ObjectContentকিন্তু আমি এটি সন্ধান করতে অক্ষম ছিল ASP.NET Core

অবশ্যই, আপনি এক্সটেনশনগুলির HttpContentসাথে একসাথে পুরো জিনিসটি এড়িয়ে যেতে Microsoft.AspNet.WebApi.Clientপারেন (এটি আপনাকে এএসপি.নেট কোর এ কাজ করার জন্য এখনই আমদানি করতে হবে: https://github.com/aspnet/Home/issues/1558 ) এবং তারপরে আপনি এই জাতীয় জিনিসগুলি করতে পারেন:

var response = await client.PostAsJsonAsync("AddNewArticle", new Article
{
    Title = "New Article Title",
    Body = "New Article Body"
});

3
সর্বাধিক বিস্তৃত উত্তর .. আপাতদৃষ্টিতে জটিল কাজ অর্জনের জন্য খুব ঝরঝরে এবং পরিষ্কার উপায়।
সালমান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.