আপনি কীভাবে এইচটিটিপিপ্লাইয়েন্ট অনুরোধের জন্য সামগ্রী-প্রকারের শিরোনাম সেট করবেন?


737

আমি কল করছি এমন কোনও এপিআই দ্বারা প্রয়োজনীয় হিসাবে আমি কোনও সামগ্রীর Content-Typeশিরোনাম সেট করার চেষ্টা করছি HttpClient

আমি Content-Typeনীচের মত সেট করার চেষ্টা করেছি :

using (var httpClient = new HttpClient())
{
    httpClient.BaseAddress = new Uri("http://example.com/");
    httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
    httpClient.DefaultRequestHeaders.Add("Content-Type", "application/json");
    // ...
}

এটি আমাকে Acceptশিরোনাম যুক্ত Content-Typeকরতে দেয় তবে আমি এটি যুক্ত করার চেষ্টা করার পরে নিম্নলিখিত ব্যতিক্রম ছোঁড়ে:

শিরোনামের অপব্যবহার। নিশ্চিত করুন যে অনুরোধ শিরোনামগুলি ব্যবহার করা হয়েছে HttpRequestMessage, সাথে প্রতিক্রিয়া শিরোনাম HttpResponseMessageএবং HttpContentঅবজেক্ট সহ সামগ্রী লিখিত শিরোনাম ।

আমি কীভাবে Content-Typeএকটি HttpClientঅনুরোধে শিরোলেখ সেট করতে পারি ?


আপনি কীভাবে .NET কোর এটিতে HTTPWebRequest অনুসরণ করতে পারেন (এটি অভ্যন্তরীণভাবে HTTPClient ব্যবহার করে), github.com/dotnet/corefx/blob/master/src/System.Net.Requests/… "সেন্ডআরকেস্ট" পদ্ধতি দেখুন
jiping-s

উত্তর:


927

সামগ্রীর ধরণটি অনুরোধের নয়, সামগ্রীর শিরোনাম, এ কারণেই এটি ব্যর্থ হচ্ছে। AddWithoutValidationরবার্ট লেভি দ্বারা প্রস্তাবিত হিসাবে কাজ করতে পারে, তবে আপনি নিজেই অনুরোধের সামগ্রী তৈরি করার সময় বিষয়বস্তুর ধরণটি সেট করতে পারেন (নোট করুন এবং স্নাতক গ্রহণের বিষয়বস্তু-শিরোলেখের জন্য দুটি স্থানে কোড স্নিপেট "অ্যাপ্লিকেশন / জেসন" যুক্ত করেছেন):

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://example.com/");
client.DefaultRequestHeaders
      .Accept
      .Add(new MediaTypeWithQualityHeaderValue("application/json"));//ACCEPT header

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "relativeAddress");
request.Content = new StringContent("{\"name\":\"John Doe\",\"age\":33}",
                                    Encoding.UTF8, 
                                    "application/json");//CONTENT-TYPE header

client.SendAsync(request)
      .ContinueWith(responseTask =>
      {
          Console.WriteLine("Response: {0}", responseTask.Result);
      });

32
বিকল্পভাবে, Response.Content.Headersবেশিরভাগ সময় কাজ করবে।
জন গিয়েজেন

4
@ আশিষজাইন এএসপি. নেট Response.Content.Headersওয়েব এপিআইয়ের সাথে জড়িত দেখেছি এমন বেশিরভাগ এসও উত্তরগুলি কোনওভাবেই কাজ করেনি, তবে HttpContext.Current.Response.ContentTypeআপনার প্রয়োজন হলে আপনি সহজেই এটি সেট করতে পারেন ।
জেরুয়েট

6
@ জারহয়েট আমি নিম্নলিখিত উপায়ে ব্যবহার করেছি যা আমার পক্ষে কাজ করেছিল। var সামগ্রী = নতুন স্ট্রিংকন্টেন্ট (ডেটা, এনকোডিং.আউটএফ 8, "অ্যাপ্লিকেশন / জেসসন");
আশীষ-বেজভায়াল

22
সামগ্রী-প্রকারটি পেললোড সহ একটি এইচটিটিপি বার্তার একটি সম্পত্তি; অনুরোধ বনাম প্রতিক্রিয়াটির সাথে এর কোনও সম্পর্ক নেই।
জুলিয়ান রেশকে

6
মজাদার. আমি তিনটি পরামিতি দিয়ে একটি নতুন স্ট্রিংকন্টেন্ট তৈরি করার চেষ্টা করেছি এবং এটি কার্যকর হয়নি। আমি তখন ম্যানুয়ালি: অনুরোধ। কনটেন্ট.হিডার্স.আরউভ করুন ("বিষয়বস্তুর ধরণ") এবং তারপরে: অনুরোধ.কন্টেন্ট.হেইডার্স.এড ("বিষয়বস্তুর ধরণ", "অ্যাপ্লিকেশন / ক্যোয়ারী + জেসন") কাজ করে it অস্বাভাবিক.
বিল নোয়েল

163

যাঁরা জনসকে কার্লোস সমাধানের জন্য মন্তব্য করেননি তাদের জন্য ...

req.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

এটি একটি পিডিএফ ডাউনলোড করতে পার্থক্য করেছে। ফোন থেকে এটি একটি এইচটিএমএল ডাউনলোড করার চেষ্টা করেছিল। এক্সটেনশন রূপান্তর করার পরে ফাইলটি সাধারণত এনকোড করা হয়।
মাত্তেও দেফন্তি

আমাকে .ToString () শেষে ফেলে দিতে হয়েছিল, তবে হ্যাঁ এটি ডাব্লুসিএফ পরিষেবা বাস্তবায়নের জন্য কাজ করেছে।
জন মেয়ার

2
"রেক" কী কী অবজেক্ট টাইপ হয় তা শেষ পর্যন্ত আমি সনাক্ত করব ... ট্রায়াল এবং ত্রুটির দ্বারা ........ তবে এটি দেখানো দুর্দান্ত হবে। আপনার বিবেচনার জন্য আপনাকে ধন্যবাদ।
গ্রানাডা কোডার

4
ঠিক তেমনই লোকেরা জানেন, মিডিয়াটাইপহাইডারভ্যালু ব্যবহার করে যদি অক্ষরটি সেট করার চেষ্টা করা হয় তবে ত্রুটি ফিরে আসবে; response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml; charset=utf-8");
এমবিাক

3
জনস কার্লোর সমাধান সম্পর্কে মন্তব্য করেছেন রেসপন্স.সন্টেন্ট.হেইডারস, তবে আপনি req.Content.Heedia ব্যবহার করছেন? অর্থাৎ অনুরোধ বনাম প্রতিক্রিয়া?
joedotnot

52

আপনি যদি একটি ছোট গ্রন্থাগার নির্ভরতা আপত্তি না মনে করেন, ফ্লারল.এইচটিটিপি [প্রকাশ: আমি লেখক] এটিকে উবার-সরল করে তুলেছেন । এর PostJsonAsyncপদ্ধতিতে বিষয়বস্তুকে সিরিয়ালাইজ করা এবং content-typeশিরোনাম সেট করা উভয়েরই যত্ন নেওয়া হয় এবং ReceiveJsonপ্রতিক্রিয়াটিকে ডিসরিয়ালাইজ করে। যদি acceptশিরোলেখের প্রয়োজন হয় তবে আপনাকে সেটিকে নিজেরাই সেট করতে হবে, তবে ফ্লারল তা করার জন্য একটি দুর্দান্ত পরিষ্কার উপায় সরবরাহ করে:

using Flurl.Http;

var result = await "http://example.com/"
    .WithHeader("Accept", "application/json")
    .PostJsonAsync(new { ... })
    .ReceiveJson<TResult>();

ফ্লারল হুডের নীচে এইচটিপিপ্লিনেন্ট এবং জসন.এনইটি ব্যবহার করে এবং এটি একটি পিসিএল তাই এটি বিভিন্ন প্ল্যাটফর্মগুলিতে কাজ করবে।

PM> Install-Package Flurl.Http

বিষয়বস্তু অ্যাপ্লিকেশন / x-www-form-urlencoded হলে কীভাবে প্রেরণ করবেন?
ভ্লাদো পান্ডিয়াস

2
ব্যাবহার করেছি. <1 মিনিটে যা পেয়েছিল তা খুঁজে পেতে আমাকে দীর্ঘ সময় নিচ্ছে। এই গ্রন্থাগারটি মুক্ত রাখার জন্য ধন্যবাদ।
নাজিব

35

ট্রাইএডডুইথআউটওয়ালিডেশন ব্যবহার করার চেষ্টা করুন

  var client = new HttpClient();
  client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");

4
কাজ না করা আমাকে একটি 'অপব্যবহৃত শিরোনামের নাম দেয়। নিশ্চিত করুন যে অনুরোধ শিরোনামগুলি HttpRequestMessage, HttpResponseMessage সহ প্রতিক্রিয়া শিরোনাম এবং এইচটিটিপি কনটেন্ট অবজেক্ট সহ সামগ্রী শিরোনাম ব্যবহৃত হয়েছে। '
মার্টিন লিয়েজ

3
আপনারা যারা "কাজ করছেন" বা "কাজ করছেন না" হিসাবে প্রতিবেদন করছেন, এইচটিপিপিপ্লিয়েন্টটি আজকাল খুব অস্পষ্ট বিষয়। অনুগ্রহ করে পুরো নাম (স্থান) এবং .dll বিধানসভাটি এটি থেকে আসছে report
গ্রানাডা কোডার

Misused header nameত্রুটি dotnet কোর 2.2 সঙ্গে নিশ্চিত হয়েছে। আমি ব্যবহার করতে @ carlosfigueira এর উত্তর ছিল stackoverflow.com/a/10679340/2084315
PS2goat

এটি সম্পূর্ণ। নেট কাজ করে (4.7)।
জাকিমা

28

নেট নির্দিষ্ট মান মান্য করা, যথা আপনি বাধ্য করার চেষ্টা করে Content-Typeহেডার শুধুমাত্র অনুরোধ বিষয়বস্তু আছে (যেমন উল্লিখিত যাবে POST, PUT, ইত্যাদি)। অতএব, অন্যরা যেমন সূচিত করেছে, Content-Typeশিরোনাম সেট করার পছন্দের উপায় HttpContent.Headers.ContentTypeসম্পত্তিটির মাধ্যমে ।

এটি দিয়েই বলা হয়েছে যে নির্দিষ্ট কিছু এপিআই (যেমন লিকুইডফায়ালস এপিআই , ২০১২-১২-২০১ of এর হিসাবে) Content-Typeএকটি GETঅনুরোধের জন্য শিরোনাম নির্ধারণ করতে হবে । । নেট নিজেই অনুরোধে এই শিরোনামটি সেট করতে দেয় না - এমনকি ব্যবহার করে TryAddWithoutValidation। তদতিরিক্ত, আপনি Contentঅনুরোধটির জন্য একটি নির্দিষ্ট করতে পারবেন না - এমনকি এটি শূন্য দৈর্ঘ্যের হলেও। আমি কেবল এটির কাছাকাছি যাওয়ার উপায়টি হ'ল প্রতিচ্ছবি অবলম্বন করা। কোডটি (অন্য কারওর প্রয়োজনে) হয়)

var field = typeof(System.Net.Http.Headers.HttpRequestHeaders)
    .GetField("invalidHeaders", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static) 
  ?? typeof(System.Net.Http.Headers.HttpRequestHeaders) 
    .GetField("s_invalidHeaders", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
if (field != null)
{
  var invalidFields = (HashSet<string>)field.GetValue(null);
  invalidFields.Remove("Content-Type");
}
_client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "text/xml");

সম্পাদনা:

মন্তব্যে উল্লিখিত হিসাবে, এই ক্ষেত্রটির dll বিভিন্ন সংস্করণে বিভিন্ন নাম রয়েছে। ইন GitHub থেকে সোর্স কোড , ক্ষেত্র বর্তমানে নামকরণ করা হয় s_invalidHeaders। @ ডেভিড থম্পসনের পরামর্শ অনুসারে উদাহরণটি অ্যাকাউন্টে পরিবর্তন করা হয়েছে।


1
এই ক্ষেত্রটি এখন এস_অনুয়ালহাইডারস তাই নিম্নলিখিত ব্যবহার করে সামঞ্জস্যতা নিশ্চিত করে: var ক্ষেত্র = টাইপফ (সিস্টেম.নেট.হট্ট্পে। হিট্পার্স.এইচটিপিআরকিয়েস্টহাইডার্স) .গেটফিল্ড ("অবৈধহাইডার্স", সিস্টেম.আরফ্লেশন.বাইন্ডিং ফ্ল্যাশস.নোনপাবলিক | সিস্টেম। রিফ্লেশন.বাইন্ডফ্লাগস.স্ট্যাটিক) ?? টাইপফ (সিস্টেম.নেট.এইচটিপি.হিডার্স.এইচটিটিপিএকুয়েস্টহাইডার্স) .গেটফিল্ড ("এস_ইনডিয়ালিহাইডার্স", সিস্টেম.রিফ্লেশন.বাইন্ডিং ফ্ল্যাশস.নোনপাবলিক | সিস্টেম.রিফ্লেশন.বাইন্ডিং ফ্ল্যাজ.স্ট্যাটিক);
ডেভিড থম্পসন

2
আপনাকে ধন্যবাদ, আপনাকে ধন্যবাদ আপনাকে ধন্যবাদ! কখনও কখনও আমার মাউন্টগুলি হ্যাং হয়ে যায় এবং আমি যখন কোনও মাইক্রোসফ্ট এপিআইতে ব্যর্থ হই তখন ড্রল বেরিয়ে আসে .. আপনার খুব সোজা পোস্ট দেখে আমি এটি পরিষ্কার করতে সক্ষম হয়েছি। না খুব খারাপ ..
জেরার্ড ONeill

1
এই কোডটি কীভাবে আপনার বর্ণিত বিপর্যয়মূলক ত্রুটির কারণ হতে পারে তা নিয়ে আমি বিভ্রান্ত। আপনি কি আপনার ব্যবহারের ক্ষেত্রে এবং যে ত্রুটিগুলি পেয়েছেন সে সম্পর্কে আরও বিশদ সরবরাহ করতে পারেন?
শাহাদাত বরণ করুন

2
কি দারুন. আরও বাহ, যে Asp.net WebApi GET পদ্ধতিতে বিষয়বস্তুর প্রকার স্পষ্টভাবে নির্দিষ্ট করা দরকার = (
AlfeG

2
হোলি মলি, আমি বিশ্বাস করতে পারি না আমাকে এটিকে অবলম্বন করতে হবে। কখন থেকে .NET ফ্রেমওয়ার্কটি এইচটিপিপি শিরোলেখ বিভাগে আমি যুক্ত করতে পারি তাতে আমার হাত ধরে রাখা দরকার? জঘন্য।
মিমিক্স

17

। নেট কোর সম্পর্কে অতিরিক্ত কিছু তথ্য (বিষয়বস্তু নেই এমন একটি অনুরোধে সামগ্রী প্রকার সরবরাহের জন্য প্রাইভেট ফিল্ড স্থাপনের বিষয়ে শাহাদতের পোস্ট পড়ার পরে) ...

আমার কোডটি ডিবাগ করার পরে আমি ব্যক্তিগত ক্ষেত্রটি প্রতিফলনের মধ্য দিয়ে সেট করতে দেখতে পাচ্ছি না - তাই আমি ভেবেছিলাম সমস্যাটি পুনরায় তৈরি করার চেষ্টা করব।

নেট। 4.6 ব্যবহার করে আমি নীচের কোডটি ব্যবহার করে দেখেছি:

HttpRequestMessage httpRequest = new HttpRequestMessage(HttpMethod.Get, @"myUrl");
httpRequest.Content = new StringContent(string.Empty, Encoding.UTF8, "application/json");

HttpClient client = new HttpClient();
Task<HttpResponseMessage> response =  client.SendAsync(httpRequest);  //I know I should have used async/await here!
var result = response.Result;

এবং, যেমনটি প্রত্যাশা করা হয়েছিল, তেমন সামগ্রীর সাথে আমি একটি সামগ্রিক ব্যতিক্রম পাই "Cannot send a content-body with this verb-type."

তবে আমি। নেট কোর (১.১) এর সাথে যদি একই জিনিস করি - তবে আমি ব্যতিক্রম পাই না। আমার অনুরোধটি আমার সার্ভার অ্যাপ্লিকেশনটির দ্বারা বেশ আনন্দের সাথে জবাব দেওয়া হয়েছিল এবং সামগ্রী-প্রকারটি তুলে নেওয়া হয়েছিল।

আমি এটি সম্পর্কে আনন্দদায়ক অবাক হয়েছিল, এবং আমি আশা করি এটি কাউকে সহায়তা করে!


1
ধন্যবাদ, জে - মূল ব্যবহার করছে না, এবং eাহেদেকের উত্তর ব্যবহার করবে। সমস্ত যুক্তিসঙ্গত সুযোগ চেষ্টা করা হয়েছে তা জেনে আমি প্রশংসা করি :)।
জেরার্ড ওনিল

1
কাজ করছে না। নেট 4 (ver "এই ক্রিয়াপদ সহ একটি সামগ্রী-দেহ পাঠাতে পারে না" "
তারেক এল-মল্লহ

3
@ তারেকেল-মল্ল্যা হ্যাঁ - দয়া করে আমার উত্তরে মন্তব্যগুলি পড়ুন। আমার পোস্টের পুরো বিষয়টিটি বোঝানো ছিল যে এটি নেট নেট 4 এ কাজ করে না, তবে এটি নেট নেটওয়ার্কে কাজ করে (তারা একই জিনিস নয়)। নেট। এ কাজ করতে এটি হ্যাক করতে সক্ষম হতে আপনাকে ওপি-র প্রশ্নের এরদোমেকের জবাবটি দেখতে হবে
জে

16

এর AddWithoutValidationপরিবর্তে কল করুন Add( এই এমএসডিএন লিঙ্কটি দেখুন )।

বিকল্পভাবে, আমি যে এপিআইটি ব্যবহার করছি তা অনুমান করছি যে এটি কেবল পোস্ট বা পুট অনুরোধের জন্য প্রয়োজন (সাধারণ জিইটি অনুরোধ নয়)। সেক্ষেত্রে, আপনি যখন কল করবেন HttpClient.PostAsyncএবং একটি পাস করবেন তখন HttpContentএটিকে Headersসেই HttpContentবস্তুর সম্পত্তিতে সেট করুন ।


কাজ না করা আমাকে একটি 'অপব্যবহৃত শিরোনামের নাম দেয়। নিশ্চিত করুন যে অনুরোধ শিরোনামগুলি HttpRequestMessage, HttpResponseMessage সহ প্রতিক্রিয়া শিরোনাম এবং এইচটিটিপি কনটেন্ট অবজেক্ট সহ সামগ্রী শিরোনাম ব্যবহৃত হয়েছে। '
মার্টিন লিয়েজ

3
অ্যাড উইথআউটভিডেশন উপস্থিত নেই
কানসাইরোবট

14

যাঁরা সমস্যায় পড়েছেন তাঁদের জন্য charset

আমার খুব বিশেষ ক্ষেত্রে ছিল যে পরিষেবা সরবরাহকারী চরসেট গ্রহণ করেনি, এবং তারা এটির অনুমতি দেওয়ার জন্য তারা কাঠামোগত পরিবর্তন করতে অস্বীকার করেছে ... দুর্ভাগ্যক্রমে এইচটিপিপ্লিয়েন্ট স্ট্রিংকন্টের মাধ্যমে স্বয়ংক্রিয়ভাবে শিরোনাম সেট করে নিচ্ছে এবং আপনি নাল বা এনকোডিং পাস করেছেন কিনা তা বিবেচনা করে না UTUTF8, এটি সর্বদা চরসেট সেট করবে ...

আজ আমি সাব-সিস্টেমটি পরিবর্তনের প্রান্তে ছিলাম; এইচটিপিপ্লিনেন্ট থেকে অন্য যে কোনও কিছুর দিকে চলে যাওয়া, আমার মনে কিছু এলো ..., "চরসেট" খালি করার জন্য প্রতিচ্ছবি কেন ব্যবহার করবেন না? ... এবং আমি এটি চেষ্টা করার আগেও আমি একটি উপায় ভেবেছিলাম, "সম্ভবত আমি এটি আরম্ভের পরে পরিবর্তন করতে পারি", এবং এটি কার্যকর হয়েছিল।

এখানে আপনি কীভাবে সঠিক "অ্যাপ্লিকেশন / জসন" "শিরোনাম ছাড়াই" শিরোনাম সেট করতে পারেন; চরসেট = utf-8 "।

var jsonRequest = JsonSerializeObject(req, options); // Custom function that parse object to string
var stringContent = new StringContent(jsonRequest, Encoding.UTF8, "application/json");
stringContent.Headers.ContentType.CharSet = null;
return stringContent;

নোট:null নিম্নলিখিত মান হবে কাজ না এবং পরিশেষে যোগ "; charset = utf- 8"

return new StringContent(jsonRequest, null, "application/json");

সম্পাদনা

@ ডেজার্টফক্সএজেড পরামর্শ দেয় যে নিম্নলিখিত কোডগুলিও ব্যবহার করা যেতে পারে এবং দুর্দান্ত কাজ করে। (আমি নিজে এটি পরীক্ষা করিনি)

stringContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");

1
স্ট্রিংকন্টেন্ট.হেইডার্স.সন্টেন্টটাইপ = নতুন মিডিয়াটাইপহাইডারভ্যালু ("অ্যাপ্লিকেশন / জেসন"); এছাড়াও কাজ করে
DesertFoxAZ

4
var content = new JsonContent();
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("charset", "utf-8"));
content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("IEEE754Compatible", "true"));

আপনার যা প্রয়োজন তা সবই।

নিউটনসফট.জসন ব্যবহার করে, আপনার যদি জসন স্ট্রিং হিসাবে কোনও সামগ্রী প্রয়োজন হয়।

public class JsonContent : HttpContent
   {
    private readonly MemoryStream _stream = new MemoryStream();
    ~JsonContent()
    {
        _stream.Dispose();
    }

    public JsonContent(object value)
    {
        Headers.ContentType = new MediaTypeHeaderValue("application/json");
        using (var contexStream = new MemoryStream())
        using (var jw = new JsonTextWriter(new StreamWriter(contexStream)) { Formatting = Formatting.Indented })
        {
            var serializer = new JsonSerializer();
            serializer.Serialize(jw, value);
            jw.Flush();
            contexStream.Position = 0;
            contexStream.WriteTo(_stream);
        }
        _stream.Position = 0;

    }

    private JsonContent(string content)
    {
        Headers.ContentType = new MediaTypeHeaderValue("application/json");
        using (var contexStream = new MemoryStream())
        using (var sw = new StreamWriter(contexStream))
        {
            sw.Write(content);
            sw.Flush();
            contexStream.Position = 0;
            contexStream.WriteTo(_stream);
        }
        _stream.Position = 0;
    }

    protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
    {
        return _stream.CopyToAsync(stream);
    }

    protected override bool TryComputeLength(out long length)
    {
        length = _stream.Length;
        return true;
    }

    public static HttpContent FromFile(string filepath)
    {
        var content = File.ReadAllText(filepath);
        return new JsonContent(content);
    }
    public string ToJsonString()
    {
        return Encoding.ASCII.GetString(_stream.GetBuffer(), 0, _stream.GetBuffer().Length).Trim();
    }
}

1
এটি কী করে তার একটি ছোট ব্যাখ্যা দিতে পারেন?
আলেজান্দ্রো

2
প্রথম লাইনটি CS0144 এর সাথে ব্যর্থ হয়: "বিমূর্ত শ্রেণি বা ইন্টারফেস 'এইচটিপিটি কনটেন্ট' এর কোনও উদাহরণ তৈরি করতে পারে না"
র্যান্ডাল ফ্ল্যাগ

1
এবং তারপরেHttpMessageHandler handler = new WebRequestHandler(); HttpResponseMessage result; using (var client = (new HttpClient(handler, true))) { result = client.PostAsync(fullUri, content).Result; }
আর্ট

2

ঠিক আছে, এটি HTTPClient নয় তবে আপনি যদি এটি ব্যবহার করতে পারেন তবে ওয়েবক্লিয়েন্টটি বেশ সহজ:

using (var client = new System.Net.WebClient())
 {
    client.Headers.Add("Accept", "application/json");
    client.Headers.Add("Content-Type", "application/json; charset=utf-8");
    client.DownloadString(...);
 }

1

আপনি এটি ব্যবহার করতে পারেন এটি কাজ হবে!

HttpRequestMessage msg = new HttpRequestMessage(HttpMethod.Get,"URL");
msg.Content = new StringContent(string.Empty, Encoding.UTF8, "application/json");

HttpResponseMessage response = await _httpClient.SendAsync(msg);
response.EnsureSuccessStatusCode();

string json = await response.Content.ReadAsStringAsync();

0

আমি নিম্নলিখিত পদ্ধতিতে এটি সবচেয়ে সহজ এবং সহজে বুঝতে পেলাম:

async Task SendPostRequest()
{
    HttpClient client = new HttpClient();
    var requestContent = new StringContent(<content>);
    requestContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    var response = await client.PostAsync(<url>, requestContent);
    var responseString = await response.Content.ReadAsStringAsync();
}
...

SendPostRequest().Wait();

0

আপনার এটি এটি করা দরকার:

    HttpContent httpContent = new StringContent(@"{ the json string }");
    httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));                
    HttpResponseMessage message = client.PostAsync(@"{url}", httpContent).Result;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.