HTTPClient এর মাধ্যমে REST এপিআইতে একটি খালি বডি পোস্ট করুন


118

আমি যে এপিআই কল করতে চাইছি তার জন্য আমি একটি পোস্ট করতে পারি তবে খালি শরীর নিয়ে। আমি ডাব্লুসিএফ ওয়েব এপিআই এইচটিপিপিলেট ব্যবহার করতে নতুন এবং আমি কোনও লিখিত কোড খুঁজে পাচ্ছি না যা খালি শরীর নিয়ে কোনও পোস্ট করবে। আমি কিছু HTTPContent.CreateEmpty () পদ্ধতির রেফারেন্স পেয়েছি, তবে আমি মনে করি না যে এটি ওয়েব API এইচটিপিপ্লিয়েন্ট কোডের জন্য কারণ যেহেতু আমি সেই পদ্ধতিটি খুঁজে পাচ্ছি না।


এইচটিটিপি কনটেন্ট.ক্রেইটএম্পটি হ'ল পুরাতন এইচটিটিপিপ্লিন্ট প্রোটোটাইপ থেকে যা REST স্টার্টার কিটের অংশ ছিল। দুর্ভাগ্যক্রমে নতুন এইচটিপিপ্লেইন্টে কোনও সমতুল্য নেই।
ড্যারেল মিলার


1
@ মিশেলফ্রিজেম যদি স্পেস টাইম ধারাবাহিকতায় কোনও গর্ত থাকে এবং ২০১১ এর আগে কোনওভাবে 2013 আসে তবে হ্যাঁ এটি একটি সম্ভাব্য সদৃশ।
রায়ান রিনালাদি

1
"সম্ভাব্য সদৃশ" পরিষ্কার-আপ করার একটি উপায় - অনুরূপ প্রশ্নগুলি বন্ধ করতে এবং সেরা উত্তরের সাথে একটি রাখার জন্য। তারিখটি অত্যাবশ্যক নয়। দেখুন meta.stackexchange.com/questions/147643/... যদি আপনি সম্মত হন যে এটা শোধন দয়া ভোট প্রয়োজন meta.stackexchange.com/questions/281980/...
মাইকেল Freidgeim

উত্তর:


117

ব্যবহারের StringContentবা ObjectContentযা থেকে আহরণ করা HttpContentবা আপনি ব্যবহার করতে পারেন nullযেমন HttpContent:

var response = await client.PostAsync(requestUri, null);


দেখে মনে হচ্ছে এটি কেবল নেট নেট ফ্রেমওয়ার্ক 4.5 এ রয়েছে? msdn.microsoft.com/en-us/library/…
এবং

এটি ডাব্লুসিএফ ওয়েব এপিআই দিয়ে শিপিং করবে তবে আমি মনে করি কিছু "ভাল অংশ" এটিকে কাঠামোর মধ্যে তৈরি করবে।
আলেকজান্ডার জিটলার

কেন এমন কোনও ওভারলোড পদ্ধতি নেই যা HttpContentশ্রেণীর প্রয়োজন হয় না ? আমাদের কি কোনও পোস্ট পোস্ট করার জন্য কমপক্ষে কিছু (একটি খালি স্ট্রিং) সরবরাহ করা উচিত?
tugberk

75
আপনি এটি nullহিসাবে ব্যবহার করতে পারেন HttpContent, এটি অনুরোধে কোনও শরীর প্রেরণ করবে না, যেমনvar response = await client.PostAsync(requestUri, null);
ওভেন উইলিয়ামস

105

এটি আগে করেছেন, কেবল এটি সহজ রাখুন:

Task<HttpResponseMessage> task = client.PostAsync(url, null);

7
এটি গৃহীত উত্তরের চেয়ে পরিষ্কার, এবং ভোট দেওয়া উচিত।
ডেভিড এবো

4

এটি খুঁজে পেয়েছেন:

Task<HttpResponseMessage> task = client.PostAsync(url, null);

অনুরোধের বডিটিতে নাল যুক্ত করে, যা ডাব্লুএসও 2 এ ব্যর্থ হয়েছিল। সঙ্গে প্রতিস্থাপিত:

Task<HttpResponseMessage> task = client.PostAsync(url, new {});

এবং কাজ।


আমি এই সন্ধানের বিষয়টি নিশ্চিত করতে পারি না (তবে আমি নিশ্চিত না যে আমার পরীক্ষাটি সম্পূর্ণ পর্যাপ্ত ছিল)। আমি যখন কোনও নিজস্ব এপিআইগুলিতে একটি nullসামগ্রী দিয়ে পোস্ট করি এবং এতে থাকা সামগ্রীটি HttpRequestMessageদেখি, তখন মনে হয় শূন্য বাইটের দৈর্ঘ্য পাচ্ছি।
বা ম্যাপার

1

এই সমস্যাটি সমাধান করার জন্য, এই উদাহরণটি ব্যবহার করুন:

   using (var client = new HttpClient())
            {
                var stringContent = new StringContent(string.Empty);
                stringContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
                var response = client.PostAsync(url, stringContent).Result;
                var result = response.Content.ReadAsAsync<model>().Result;
            }

-6

আমি মনে করি এটি যদি স্বয়ংক্রিয়ভাবে আপনার ওয়েব পদ্ধতিতে কোনও পরামিতি না থাকে বা সেগুলি সমস্ত ইউআরএল টেমপ্লেটে ফিট করে।

উদাহরণস্বরূপ, এই ঘোষণাটি খালি শরীর প্রেরণ করে:

  [OperationContract]
  [WebGet(UriTemplate = "mykewlservice/{emailAddress}",
     RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json,
     BodyStyle = WebMessageBodyStyle.Wrapped)]
  void GetStatus(string emailAddress, out long statusMask);

আমি একটি খালি শরীর পাঠানোর চেষ্টা করছি। এইচটিটিপিসিলেট.পোস্ট () পদ্ধতির জন্য একটি ইউআরআই এবং একটি এইচটিটিপি কনটেন্ট অবজেক্ট দরকার। আমি যখন কিছু প্রেরণ করতে চাই না তখন এইচটিটিপি কনটেন্ট হিসাবে কী পাস করব আমি তা নই।
রায়ান রিনালাদি

সুতরাং আপনি ডাব্লুসিএফ ব্যবহার করছেন না। এটি আরও সহজ: ... HTTPWebRequest অনুরোধ = (HttpWebRequest) WebRequest.Create ("http: // ..."); অনুরোধ.মথোদ = "পোস্ট"; HttpWebResponse respose = (HTTPWebResponse) অনুরোধ.গেটরেস্পোনস (); ... আপনি প্রতিক্রিয়াতে ফলাফল
ইভান জি

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