HTTPClient অনুরোধের জন্য কাস্টম শিরোনাম


140

আমি কীভাবে একটি HttpClientঅনুরোধে একটি কাস্টম শিরোনাম যুক্ত করব ? আমি PostAsJsonAsyncJSON পোস্ট করার জন্য পদ্ধতি ব্যবহার করছি । আমার যে কাস্টম শিরোনামটি যুক্ত করা দরকার তা হ'ল

"X-Version: 1"

আমি এ পর্যন্ত এটিই করেছি:

using (var client = new HttpClient()) {
    client.BaseAddress = new Uri("https://api.clickatell.com/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "xxxxxxxxxxxxxxxxxxxx");
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var response = client.PostAsJsonAsync("rest/message", svm).Result;
}


@ লিয়াম: আমার প্রশ্নটি ছিল কাস্টম শিরোনামগুলি কীভাবে যুক্ত করা যায়। যেখানে অন্য প্রশ্নটি ছিল শিরোনামগুলি কীভাবে যুক্ত করবেন
লিবিন জোসেফ

2
আমি মনে করি এটি সন্ধান পেয়েছে যে আমাদের এইচটিপিপ্লিয়েন্টকে নিষ্পত্তি করা উচিত নয়। aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong
ডন রোলিং

উত্তর:


57
var request = new HttpRequestMessage {
    RequestUri = new Uri("[your request url string]"),
    Method = HttpMethod.Post,
    Headers = {
        { "X-Version", "1" } // HERE IS HOW TO ADD HEADERS,
        { HttpRequestHeader.Authorization.ToString(), "[your authorization token]" },
        { HttpRequestHeader.ContentType.ToString(), "multipart/mixed" },//use this content type if you want to send more than one content type
    },
    Content = new MultipartContent { // Just example of request sending multipart request
        new ObjectContent<[YOUR JSON OBJECT TYPE]>(
            new [YOUR JSON OBJECT TYPE INSTANCE](...){...}, 
            new JsonMediaTypeFormatter(), 
            "application/json"), // this will add 'Content-Type' header for the first part of request
        new ByteArrayContent([BINARY DATA]) {
            Headers = { // this will add headers for the second part of request
                { "Content-Type", "application/Executable" },
                { "Content-Disposition", "form-data; filename=\"test.pdf\"" },
            },
        },
    },
};

38
উত্তরটি অত্যন্ত বিভ্রান্তিকর ... আপনি নথি, ফাঁকা.পিডিএফ ইত্যাদির জন্য কোড আনছেন কেন? কন্টেন্ট প্যারামের মধ্যে কাস্টম শিরোনাম পাস করার জন্য বাইটারি ক্লাস ইনস্ট্যান্ট করছে?
হেগ

2
@ ভাল। আপনি যদি শিরোলেখের সন্ধান করে থাকেন তবে এটি দেখতে পারেন। ছবিটি সম্পূর্ণ করতে সামগ্রীতে সামগ্রী উপস্থিত রয়েছে কারণ আপনি সম্ভবত আপনার অনুরোধে কিছু সামগ্রী যুক্ত করতে চান। এবং ক্লান্তিকর না হওয়ার জন্য সামগ্রীটি জটিল এবং জেএসএন এবং বাইনারি উভয় ডেটা রয়েছে।
আনুবিস

2
এটি এটি করার জন্য আরও সহজবোধ্য মনে হয়: আপনার সামগ্রী JSON ব্যবহার করে স্ট্রিংকন্টটি তৈরি করুন, আপনার পদ্ধতি এবং ইউআরআই দিয়ে একটি HTTP বার্তা তৈরি করুন, তারপরে বার্তাটির মতো শিরোনাম যুক্ত করুন H হায়ডার্স Aএড ("x": "y") .... তারপরে এগুলিকে "var প্রতিক্রিয়া = অপেক্ষা করুন httpClient.SendAsync (বার্তা) এর মত একটি প্রতিক্রিয়ার মধ্যে পাস করুন;"
হেগ

@ উগু আমি এই স্মরণার্থের জন্য মনে রাখব। ধন্যবাদ!
অনুবিস

3
উপরের স্বীকৃত উত্তরের কোন লাইনটি আসলে ওপি অনুরোধ করেছিল, শিরোনামটি এক্স-সংস্করণে প্রয়োগ করে? কেন এটি গৃহীত উত্তর হিসাবে বিবেচিত?
রন

215

আমি আমার প্রশ্নের উত্তর খুঁজে পেয়েছি।

client.DefaultRequestHeaders.Add("X-Version","1");

এটি আপনার অনুরোধে একটি কাস্টম শিরোনাম যুক্ত করা উচিত


50
না, তা হয় না। এই উত্তরটি সাবধানতার সাথে দেখা উচিত, যেহেতু প্রতিটি অনুরোধের সাথে ডিফল্ট অনুরোধ শিরোনাম প্রেরণ করা হয়। আপনার অনুরোধটি @ আনুবিসের পরামর্শ মতো তৈরি করা উচিত। আপনি যখন এইচটিটিপি ক্লিনেন্ট তৈরি করেন তখন ডিফল্টরয়েস্টহাইডার্সকে পপুল করা উচিত।
রুহরপটপ্যাট্রিয়ট

6
এটি কেবলমাত্র কাজ করে কারণ আপনি প্রতিটি অনুরোধের জন্য একটি নতুন এইচটিটিপিপ্লায়েন্ট ইনস্ট্যান্ট করছেন। এই শ্রেণিটি যেভাবে ব্যবহার করা উচিত তা নয়: এটি একটি স্থির ক্ষেত্র হওয়া উচিত, সমস্ত অনুরোধের জন্য পুনরায় ব্যবহার করা উচিত, কমপক্ষে একই শেষ পয়েন্টে। ডকুমেন্টেশন এবং অজস্র ব্লগ পোস্টগুলি দেখুন। তারপরে অবশ্যই, যেমন @ রুহরপটপ্যাট্রিয়ট উল্লেখ করেছেন, ডিফল্ট শিরোনাম পরিবর্তন করা সমস্ত অনুরোধকে প্রভাবিত করবে।
কামিলক

@ রুহরপটপ্যাট্রিয়ট প্রতিটি অনুরোধের জন্য শিরোনাম প্রেরণে দোষ কি?
ডেভিড ক্লেম্পফনার

1
@ আজবিভেন নাহ, এটি যা বলে তা নয়। পৃষ্ঠার শীর্ষে থাকা উদাহরণটি অ্যাপ্লিকেশনের মূল পদ্ধতিটি দেখায়, সুতরাং এইচটিটিপিপ্লিনেন্টের নিষ্পত্তি হওয়া সত্ত্বেও একই উদাহরণটি আবেদনের আজীবন ব্যবহৃত হয় এবং ডকুমেন্টেশনটি যা কিছু বলেছে তার সাথে এটি সঠিক is আরও কিছুটা নিচে: 'এইচটিপিপিপ্লায়েন্টটি একবার ইনস্ট্যান্ট করা এবং অ্যাপ্লিকেশনটির পুরো জীবন জুড়ে পুনরায় ব্যবহার করার উদ্দেশ্য । এই অনুচ্ছেদে অনুসরণ করা একটি স্থির ক্ষেত্রে একটি এইচটিপিপিপ্লায়েন্ট বরাদ্দ করার উদাহরণ is
কামিল্ক

1
@ কামিল্ক, আপনি ঠিক মারা গেছেন - এই উদাহরণটি আমাকে ভুল করেছে। আমাকে ঠিক রাখার জন্য ধন্যবাদ :)
আজবিওয়ান

79

এখানে আনুবিসের ভিত্তিতে একটি উত্তর দেওয়া হয়েছে (যা প্রতিটি অনুরোধের জন্য শিরোনামকে সংশোধন করে না এমনটি একটি ভাল পদ্ধতির) তবে এটি মূল প্রশ্নের কোডের তুলনায় আরও সমান:

using Newtonsoft.Json;
...

    var client = new HttpClient();
    var httpRequestMessage = new HttpRequestMessage
        {
            Method = HttpMethod.Post,
            RequestUri = new Uri("https://api.clickatell.com/rest/message"),
            Headers = { 
                { HttpRequestHeader.Authorization.ToString(), "Bearer xxxxxxxxxxxxxxxxxxxx" },
                { HttpRequestHeader.Accept.ToString(), "application/json" },
                { "X-Version", "1" }
            },
            Content = new StringContent(JsonConvert.SerializeObject(svm))
        };

    var response = client.SendAsync(httpRequestMessage).Result;

পছন্দ করেছেন সামগ্রী-প্রকার একটি সামগ্রী শিরোনাম।
পানাগিওটিস কানভোস

1
সম্মত এই উত্তর। এটি ওপি দ্বারা অনুরোধ করা শিরোনামকে কীভাবে যুক্ত করবেন তা প্রদর্শিত হয়। আমার প্রশ্নের উত্তরও দিয়েছেন।
রন

1
অবগতির জন্য আমি মনে করি HttpRequestHeader.Accessহওয়া উচিত HttpRequestHeader.Accept
ভর ডট নেট

উপায় দ্বারা এসএমএম কি?
aswzen

@ আসওয়েন এটি ওপির প্রশ্ন থেকে - এমন একটি মডেল যা আমি অনুমান করব। বস্তুটি সিরিয়াল করা হচ্ছে।
ক্রিস ময়ূর

2

ক্লাসে একটি Headersসম্পত্তি আছে HttpRequestMessage। আপনি সেখানে কাস্টম শিরোনাম যুক্ত করতে পারেন, যা প্রতিটি এইচটিটিপি অনুরোধের সাথে প্রেরণ করা হবে। DefaultRequestHeadersমধ্যে HttpClientবর্গ, অপরপক্ষে, সেট করে যে ক্লায়েন্ট বস্তুর ব্যবহার করে, তাই নাম পাঠানো হেডার প্রতিটি অনুরোধের সাথে পাঠানো হবে ডিফল্ট অনুরোধ শিরোলেখ।

আশা করি কমপক্ষে ভবিষ্যতে এই উত্তরটি দেখার জন্য এটি বিষয়গুলি আরও পরিষ্কার করে দেবে seeing


1
না, এটি কোনও পরিষ্কার করে না। উভয় ক্ষেত্রেই আপনি বলছেন যে আপনি প্রতিটি অনুরোধে শিরোনাম প্রেরণ করছেন - তবে পার্থক্য কী?
joedotnot

3
Headersএকটি পৃথক HttpRequestMessageবস্তুর সম্পত্তি । এইভাবে আপনি বিভিন্ন শিরোনাম সহ বিভিন্ন বার্তা তৈরি করতে পারেন। বস্তুর DefaultRequestHeadersসম্পত্তি HttpClient; যদি কোনও প্রদত্ত মাধ্যমে একাধিক বার্তা প্রেরণ করা হয় তবে এই HttpClientজাতীয় সমস্ত বার্তাগুলিতে DefaultRequestHeadersমেসেজের স্বতন্ত্র শিরোনামগুলিতে একই যোগ হবে।
রস প্রেসার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.