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


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.