এই ক্রিয়াপদ-সহ কোনও সামগ্রী-দেহ প্রেরণ করতে পারে না


96

আমি আমার .NET 2.0 অ্যাপ্লিকেশনটিতে (উইন্ডোজ মোবাইল 6 স্ট্যান্ডার্ড এমুলেটরটিতে চলমান) এই ব্যতিক্রমটি (প্রোটোকলভিওলেশন এক্সসেপশন) পেয়েছি। আমাকে যে বিষয়টি বিভ্রান্ত করে তা হ'ল যতদূর আমি জানি, আমি কোনও কন্টেন্ট বডি যুক্ত করিনি, যদি না আমি অজান্তে এটি কোনওভাবে না করে করি। আমার কোডটি নীচে (খুব সাধারণ)। .NET কে বোঝানোর জন্য আমার আরও কিছু করার দরকার আছে যে এটি কেবল একটি http GET?

ধন্যবাদ, ব্রায়ান

//run get and grab response
WebRequest request = WebRequest.Create(get.AbsoluteUri + args);
request.Method = "GET";
Stream stream = request.GetRequestStream();           // <= explodes here
XmlTextReader reader = new XmlTextReader(stream);

উত্তর:


152

অনুরোধের স্ট্রিমটি পাবেন না, বেশ সহজভাবে। জিইটি অনুরোধগুলির সাধারণত মৃতদেহ থাকে না (যদিও এটি প্রযুক্তিগতভাবে এইচটিটিপি দ্বারা নিষিদ্ধ নয় ) এবং WebRequestএটি সমর্থন করে না - তবে GetRequestStreamঅনুরোধের জন্য বডি ডেটা সরবরাহ করে কলিংয়ের জন্য এটিই ছিল।

আপনি যে স্ট্রিম থেকে পড়ার চেষ্টা করছেন তা প্রদত্ত, আমার কাছে দেখে মনে হচ্ছে আপনি আসলে প্রতিক্রিয়া পেতে এবং সেখান থেকে প্রতিক্রিয়া স্ট্রিমটি পড়তে চান :

WebRequest request = WebRequest.Create(get.AbsoluteUri + args);
request.Method = "GET";
using (WebResponse response = request.GetResponse())
{
    using (Stream stream = response.GetResponseStream())
    {
        XmlTextReader reader = new XmlTextReader(stream);
        ...
    }
}

15
প্রযুক্তিগতভাবে, জিইটি অনুরোধগুলিতে মৃতদেহ থাকতে পারে, তবে .NET মৃতদেহগুলির সাথে জিইটি পুনর্নির্মাণগুলি সমর্থন করে না। stackoverflow.com/questions/2064281/...
mhud

4
@ জনস্কিট আপনি অবশ্যই একটি প্রতিভা বা কিছু হতে হবে। ঠিক এটাই আমার সমস্যার সমাধান করেছে। +1
চিরন্তন শিক্ষানবিশ

4
@ চিরকালীন শিখর আপনার পেছনের দিকে এটি আছে। যথাযথ প্রকাশটি হ'ল, "জিনিয়াস, আপনার অবশ্যই স্কিটি বা কিছু হতে হবে"। :) এটি আমাকেও বাছাই করে ফেলেছে এবং আমি বুঝতে পেরেছিলাম যে আমি মিঃ স্কিটকে 1 এম তে সহায়তা করছি before
ড্যান সলোভে

@ জোনস্কিট, কোনও সামগ্রী সংস্থার সাথে জিইটি অনুরোধ প্রেরণ করার উপায় আছে HttpClientএবং HttpRequestMessage?
শিমি ওয়েইজস্যান্ডলার

@ জোনস্কিট এনএম আমি এখানে আমার উত্তর পেয়েছি ।
শিমি ওয়েইজহ্যান্ডলার

5

ফ্লুরল ব্যবহার করে আমারও একই সমস্যা ছিল tt HTTP:

Flurl.Http.FlurlHttpException: Call failed. Cannot send a content-body with this verb-type. GET http://******:8301/api/v1/agents/**** ---> System.Net.ProtocolViolationException: Cannot send a content-body with this verb-type.

.WithHeader("Content-Type", "application/json")IFlurlRequest তৈরি করার সময় আমি সমস্যাটি ব্যবহার করেছি।


2

কারণ আপনি শিরোনাম নির্দিষ্ট করেন নি।

আমি একটি বর্ধিত উদাহরণ যুক্ত করেছি:

var request = (HttpWebRequest)WebRequest.Create(strServer + strURL.Split('&')[1].ToString());

শিরোনাম (রেফের অনুরোধ, পি_মেথোদ);

এবং পদ্ধতি শিরোনাম:

private void Header(ref HttpWebRequest p_request, string p_Method)
{
    p_request.ContentType = "application/x-www-form-urlencoded";
    p_request.Method = p_Method;
    p_request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows CE)";
    p_request.Host = strServer.Split('/')[2].ToString();
    p_request.Accept = "*/*";
    if (String.IsNullOrEmpty(strURLReferer))
    {
        p_request.Referer = strServer;
    }
    else
    {
        p_request.Referer = strURLReferer;
    }
    p_request.Headers.Add("Accept-Language", "en-us\r\n");
    p_request.Headers.Add("UA-CPU", "x86 \r\n");
    p_request.Headers.Add("Cache-Control", "no-cache\r\n");
    p_request.KeepAlive = true;
}

-7

আপনি প্রতিক্রিয়া স্ট্রিমটি পড়ার আগে দয়া করে অনুরোধ সামগ্রী সামগ্রীটি সেট করুন;

 request.ContentType = "text/xml";
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.