HttpClient এর অনুমোদনের শিরোনাম সেট করা হচ্ছে


483

আমার একটি এইচটিটিপিপ্লায়েন্ট রয়েছে যা আমি একটি REST এপিআইয়ের জন্য ব্যবহার করছি। তবে অনুমোদন শিরোনামটি সেট আপ করতে আমার সমস্যা হচ্ছে। আমার OAuth অনুরোধটি করার মাধ্যমে আমি পেয়েছি টোকেনের শিরোনামটি সেট করা দরকার। .NET- এর জন্য আমি কিছু কোড দেখেছি যা নীচের পরামর্শ দেয়,

httpClient.DefaultRequestHeaders.Authorization = new Credential(OAuth.token);

তবে ক্রেডেনসিয়াল ক্লাসটি উইনআরটিতে নেই in অনুমোদনের শিরোনাম কীভাবে সেট করবেন সে সম্পর্কে কারও কোনও ধারণা আছে?


1
ক্রেডেনসিয়াল ক্লাসটি কোন নেমস্পেসের সাথে সম্পর্কিত?
kampsj

@ Kampsj আমি জানি না যেহেতু এটি একটি নেট নেট স্পেস যা উইনআরটিতে নেই
স্টিফেন হাইনেস

1
কেন অনুরোধ করবেন না H হায়ডার্স Aএড ("অনুমোদন", টোকেন);
এহেল

উত্তর:


815

সুতরাং এটি করার উপায় নিম্নলিখিতটি,

httpClient.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", "Your Oauth token");

14
আপনি কীভাবে "আপনার ওউথ টোকন" পাবেন?
সিক্রেট কাঠবিড়ালি

3
আমি যা ব্যবহার করেছি তা হ'ল: client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "encrypted user/pwd");অ্যাডভান্সড রেস্ট রেস্ট ক্লায়েন্ট ক্রোম এক্সটেনশন থেকে এনক্রিপ্ট করা ব্যবহারকারী / পিডাব্লুডি নেওয়া।
লাল

6
@ রেড ফাই, দ্বিতীয় প্যারামিটারটি বেস 64 এনকোডেড ব্যবহারকারী: পাসওয়ার্ড (এটি এনক্রিপ্ট করা হয়নি) not
n00b

5
আমার অ্যাপ্লিকেশনটি আনন্দের সাথে যুগে যুগে এটি ব্যবহার করছিল, তারপরে নীল রঙের বাইরে থেকে আমি রানটাইমবাইন্ডার এক্সসেপশন পেতে শুরু করি। আমাকে httpClient.DefaultRequestHeilers.Add ("অনুমোদন", "বেয়ারার", "আপনার ওউথ টোকেন") এ যেতে হয়েছিল; এটি আবার যেতে পেতে।
kraeg

8
@ ক্রেইগ, আপনার তালিকাভুক্ত কোডটি সংকলন করে না, আপনি কি শেষের মতো দুটি স্ট্রিংকে বোঝাতে চেয়েছিলেন: ক্লায়েন্ট.ডাফল্টক্যুয়েস্টহাইডার্স.এড ("অনুমোদন", "বেয়ার" + "আপনার ওউথ টোকেন");
ট্রয়স্টেভেন

354
request.DefaultRequestHeaders.Authorization = 
    new AuthenticationHeaderValue(
        "Basic", Convert.ToBase64String(
            System.Text.ASCIIEncoding.ASCII.GetBytes(
               $"{yourusername}:{yourpwd}")));

27
@ মিকিডানকান এইচটিটিপি ক্লিনেন্টের একটি ডিফল্টরেক্সেস্টহাইডার্স রয়েছে A অনুমোদন। এবং এই উত্তরটি কেবল আমার দিনকে উদ্ধার করেছিল। হোয়াইট্রাবিটকে অনেক ধন্যবাদ।
জোয়ে শ্লুচটার

3
এটি কাজ করছে না, আপনি যদি অহ্টোরিজেশন শিরোনামটি পরীক্ষা করেন তবে স্ট্রিং বেসিকের চেয়ে বেশি কিছু নেই।
রাফায়েউ

1
যে কেউ ইউজারনেম এবং পাসওয়ার্ডকে বেস 64 স্ট্রিংয়ে রূপান্তর করা কেন গুরুত্বপূর্ণ তা ব্যাখ্যা করতে পারে? এটি কোনও সত্যিকারের এনক্রিপশন দেয় না, তবে কেন এটি গুরুত্বপূর্ণ?
জোনাথন উড

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

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

82

আমি এই সমস্যাটি মোকাবেলা করার জন্য একটি ভাল উপায় খুঁজছি এবং আমি একই প্রশ্নের দিকে তাকিয়ে আছি। আশা করি, এই উত্তরটি একই সমস্যায় থাকা প্রত্যেককেই আমার পছন্দ করবে।

using (var client = new HttpClient())
{
    var url = "https://www.theidentityhub.com/{tenant}/api/identity/v1";
    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
    var response = await client.GetStringAsync(url);
    // Parse JSON response.
    ....
}

https://www.theidentityhub.com/hub/Docamentation/CallTheIdentityHubApi থেকে রেফারেন্স


1
আমি সঠিক একই জিনিস @willie করছি এবং আমি এখনও আমার API থেকে একটি 401 পেয়ে করছি
SomethingOn

2
হাই @ কিছু কথা আমি মনে করি আপনি একটি সঠিক টোকেন কীটি পেয়েছেন নি, যাতে আপনি 401 পেয়েছেন, আমি আমার ব্যক্তিগত "প্রশ্ন জিজ্ঞাসা করুন" তে আমার উপায় ভাগ করব, আশা করি এটি আপনার সমস্যার মোকাবেলায় সহায়তা করতে পারে। একটি মুহুর্তের জন্য অপেক্ষা করে পিপিএস
উইলি চেং

14
আপনার কোনও usingব্লকের মধ্যে একটি এইচটিপিপিলেট স্থাপন করা উচিত নয় । (হ্যাঁ, আমি জানি এটি পিছনের দিকে শোনাচ্ছে তবে আপনি যদি usingএইচটিপিপিপ্লায়েন্টকে পুনর্ব্যবহারের পরিবর্তে ব্যবহার করেন তবে আপনি সংযোগগুলি ফাঁস করবেন ))
জোনাথন অ্যালেন

42

কার্য সম্পাদন এবং পোর্ট ক্লান্তিজনিত সমস্যার জন্য এবং এইচটিপিপ্লিনেন্ট উদাহরণটি পুনরায় ব্যবহার করা যেমন একটি ভাল অনুশীলন , এবং কারণ উত্তরগুলির কোনওটিই এই সমাধান দেয় না (এবং এমনকি আপনাকে খারাপ অভ্যাসের দিকে পরিচালিত করে :() আমি আমার তৈরি উত্তরের দিকে এখানে একটি লিঙ্ক রেখেছি একই প্রশ্নে:

https://stackoverflow.com/a/40707446/717372

কীভাবে সঠিকভাবে এইচটিটিপিপ্লায়েন্ট ব্যবহার করবেন সে সম্পর্কে কিছু উত্স:


5
বন্দর ক্লান্তি সমস্যা কোন তামাশা নয়। এটি QA তে প্রায়শই ঘটে না, তবে উত্পাদনে যে কোনও ভারী ব্যবহৃত প্রকল্পটিকে আঘাত করবে।
জোনাথন অ্যালেন

একটি কংক্রিট উদাহরণস্বরূপ আমার পোস্টে দেখুন stackoverflow.com/a/59052193/790635
EMP

41

আমি TheWhiteRabbit এর জবাবের সাথে একমত, তবে আপনার যদি HttpClient ব্যবহার করে প্রচুর কল হয় তবে কোডটি আমার মতে কিছুটা পুনরাবৃত্তি বলে মনে হচ্ছে।

আমি মনে করি উত্তরটি কিছুটা উন্নত করার জন্য দুটি উপায় আছে।

ক্লায়েন্ট তৈরি করতে একটি সহায়ক শ্রেণি তৈরি করুন:

public static class ClientHelper
{
    // Basic auth
    public static HttpClient GetClient(string username,string password)
    {
            var authValue = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}")));

            var client = new HttpClient(){
                DefaultRequestHeaders = { Authorization = authValue}
                //Set some other client defaults like timeout / BaseAddress
            };
            return client;
    }

    // Auth with bearer token
    public static HttpClient GetClient(string token)
    {
            var authValue = new AuthenticationHeaderValue("Bearer", token);

            var client = new HttpClient(){
                DefaultRequestHeaders = { Authorization = authValue}
                //Set some other client defaults like timeout / BaseAddress
            };
            return client;
    }
}

ব্যবহার:

using(var client = ClientHelper.GetClient(username,password))
{
    //Perform some http call
}

using(var client = ClientHelper.GetClient(token))
{
    //Perform some http call
}

একটি এক্সটেনশন পদ্ধতি তৈরি করুন:

কোনও সৌন্দর্য পুরষ্কার জিততে পারে না তবে দুর্দান্ত কাজ করে :)

    public static class HttpClientExtentions
    {
        public static AuthenticationHeaderValue ToAuthHeaderValue(this string username, string password)
        {
            return new AuthenticationHeaderValue("Basic",
        Convert.ToBase64String(
            System.Text.Encoding.ASCII.GetBytes(
                $"{username}:{password}")));
        }
    }

ব্যবহার:

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Authorization = _username.ToAuthHeaderValue(_password); 
}

আবার আমি মনে করি উপরের দুটি বিকল্পগুলি ক্লায়েন্টকে বিবৃতিটি কিছুটা কম পুনরাবৃত্তি করে তোলে। মনে রাখবেন যে আপনি যদি একাধিক এইচপি কল করে থাকেন তবে এইচটিপসিপ্লিয়েন্টটি পুনরায় ব্যবহার করা ভাল অনুশীলন তবে আমি মনে করি এটি এই প্রশ্নের সুযোগের বাইরে কিছুটা নয়।


20
আমি দেখতে পাচ্ছি যে আপনার উত্তরটি উজ্জ্বল হয়েছে তবে আমি এই পদ্ধতির টিএল করার পরামর্শ দিচ্ছি না; ডিআর এর
স্পষ্টত

2
@ লিপিটা, এটি সত্য তবে আপনি যদি শেষ দুটি বাক্যটি পড়ে থাকেন তবে আমি ঠিক এই কারণে এইচটিপিপ্লেইয়েন্টকে পুনরায় ব্যবহার করার সর্বোত্তম অনুশীলন বলি তবে আমি মনে করি এটি এই প্রশ্নের সুযোগের বাইরে নয়।
ফ্লোরিয়ান শ্যাচাল

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

1
সকেটের ক্লান্তি সমস্যা এড়াতে এইচটিটিপিপ্লায়েন্টফ্যাক্টরি ব্যবহার করা আরও ভাল।
রায়ানোক

20

আমি বহনকারী টোকেন সেট করছিলাম

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

এটি একটি শেষ পয়েন্টে কাজ করছিল, তবে অন্য নয়। বিষয়টি ছিল আমার কম মামলা bছিল "bearer"। পরিবর্তনের পরে এটি দু'জনের জন্যই কাজ করে যা আমি হিট করছি। আপনি যদি সুই এর সন্ধানের জন্য খড়খড়ির একটি হিসাবেও বিবেচনা না করে থাকেন তবে এ জাতীয় সহজ জিনিসটি মিস করা।

"Bearer"মূলধন সহ - নিশ্চিত করুন ।


17

আমি আপনাকে পরামর্শ:

HttpClient.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");

এবং তারপরে আপনি এটির মতো ব্যবহার করতে পারেন:

var response = await client.GetAsync(url);
if (response.IsSuccessStatusCode)
{
    responseMessage = await response.Content.ReadAsAsync<ResponseMessage>();
}

উদাহরণস্বরূপ যদি আপনার টোকেনের সময় 1 ঘন্টা শেষ হয় তবে আপনাকে এই সমাধানটি সহ HTTPClient আপডেট করতে হবে। আমি আপনার টোকেনটি এখনও বৈধ কিনা তা যাচাই করার পরামর্শ দিচ্ছি এবং অন্যথায় এটি রিফ্রেশ এবং এটি HTTPRequestMessage এ যুক্ত করুন
জোহান ফ্রানজান

13

সি # এইচটিটিপিসিলেট সহ বেসিক প্রমাণীকরণ সেট করতে authe নিম্নলিখিত কোডটি আমার জন্য কাজ করছে।

   using (var client = new HttpClient())
        {
            var webUrl ="http://localhost/saleapi/api/";
            var uri = "api/sales";
            client.BaseAddress = new Uri(webUrl);
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.ConnectionClose = true;

            //Set Basic Auth
            var user = "username";
            var password = "password";
            var base64String =Convert.ToBase64String( Encoding.ASCII.GetBytes($"{user}:{password}"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",base64String);

            var result = await client.PostAsJsonAsync(uri, model);
            return result;
        }

ঠিক আমার যা প্রয়োজন, ধন্যবাদ।
rchrd

9

আমি এটি এইভাবে করেছি:

using (HttpClient httpClient = new HttpClient())
{
   Dictionary<string, string> tokenDetails = null;
   var messageDetails = new Message { Id = 4, Message1 = des };
   HttpClient client = new HttpClient();
   client.BaseAddress = new Uri("http://localhost:3774/");
   var login = new Dictionary<string, string>
       {
           {"grant_type", "password"},
           {"username", "sa@role.com"},
           {"password", "lopzwsx@23"},
       };
   var response = client.PostAsync("Token", new FormUrlEncodedContent(login)).Result;
   if (response.IsSuccessStatusCode)
   {
      tokenDetails = JsonConvert.DeserializeObject<Dictionary<string, string>>(response.Content.ReadAsStringAsync().Result);
      if (tokenDetails != null && tokenDetails.Any())
      {
         var tokenNo = tokenDetails.FirstOrDefault().Value;
         client.DefaultRequestHeaders.Add("Authorization", "Bearer " + tokenNo);
         client.PostAsJsonAsync("api/menu", messageDetails)
             .ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
      }
   }
}

এই ইউ টিউব ভিডিওটি আমাকে অনেক সাহায্য করে। অনুগ্রহপূর্বক এটি ভালো করে দেখুন. https://www.youtube.com/watch?v=qCwnU06NV5Q


9

বেসিক অনুমোদন এবং জেসন পরামিতি ব্যবহার করুন।

using (HttpClient client = new HttpClient())
                    {
                        var request_json = "your json string";

                        var content = new StringContent(request_json, Encoding.UTF8, "application/json");

                        var authenticationBytes = Encoding.ASCII.GetBytes("YourUsername:YourPassword");

                        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
                               Convert.ToBase64String(authenticationBytes));
                        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                        var result = await client.PostAsync("YourURL", content);

                        var result_string = await result.Content.ReadAsStringAsync();
                    }

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

9

আপনি যদি HttpClientএটি পুনরায় ব্যবহার করতে চান DefaultRequestHeadersতবে প্রতিটি অনুরোধের সাথে প্রেরণের জন্য সেগুলি ব্যবহার না করার পরামর্শ দেওয়া হয় ।

আপনি এটি চেষ্টা করতে পারেন:

var requestMessage = new HttpRequestMessage
    {
        Method = HttpMethod.Post,
        Content = new StringContent("...", Encoding.UTF8, "application/json"),
        RequestUri = new Uri("...")
    };

requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Basic", 
    Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes($"{user}:{password}")));

var response = await _httpClient.SendAsync(requestMessage);

8

6 বছর পরে তবে এটি কাউকে সাহায্য করার ক্ষেত্রে এটি যুক্ত করুন।

https://www.codeproject.com/Tips/996401/Authenticate-WebAPIs-with-Basic-and-Windows-Authen

var authenticationBytes = Encoding.ASCII.GetBytes("<username>:<password>");
using (HttpClient confClient = new HttpClient())
{
  confClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", 
         Convert.ToBase64String(authenticationBytes));
  confClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(Constants.MediaType));  
  HttpResponseMessage message = confClient.GetAsync("<service URI>").Result;
  if (message.IsSuccessStatusCode)
  {
    var inter = message.Content.ReadAsStringAsync();
    List<string> result = JsonConvert.DeserializeObject<List<string>>(inter.Result);
  }
}

আমার জন্য কাজ করেছেন। উইলি চেংয়ের উত্তরটির বিরোধিতা যা আমার পক্ষে কার্যকর হয়নি।
ব্যবহারকারী 890332

5

ইউটিএফ 8 অপশন

request.DefaultRequestHeaders.Authorization = 
new AuthenticationHeaderValue(
    "Basic", Convert.ToBase64String(
        System.Text.Encoding.UTF8.GetBytes(
           $"{yourusername}:{yourpwd}")));

3

সমাবেশ AuthenticationHeaderValueক্লাস ব্যবহার করেSystem.Net.Http

public AuthenticationHeaderValue(
    string scheme,
    string parameter
)

আমরা Authorizationআমাদের httpclientমত বিদ্যমান শিরোনাম সেট বা আপডেট করতে পারি :

httpclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", TokenResponse.AccessToken);

1
সুতরাং আপনাকে স্বাগতম, তবে দয়া করে আরও কিছু প্রসঙ্গ যুক্ত করুন।
জেপি হেলিমোনস

উত্তরটি স্পট রয়েছে তবে তার কোডটি কী করা উচিত তা ব্যাখ্যা করার জন্য একটি লাইনার থাকলে তা ক্ষতি করবে না। এমনি বলছি.
iiminov

2

BaseWebApi.cs

public abstract class BaseWebApi
{
    //Inject HttpClient from Ninject
    private readonly HttpClient _httpClient;
    public BaseWebApi(HttpClient httpclient)
    {
        _httpClient = httpClient;
    }

    public async Task<TOut> PostAsync<TOut>(string method, object param, Dictionary<string, string> headers, HttpMethod httpMethod)
    {
        //Set url

        HttpResponseMessage response;
        using (var request = new HttpRequestMessage(httpMethod, url))
        {
            AddBody(param, request);
            AddHeaders(request, headers);
            response = await _httpClient.SendAsync(request, cancellationToken);
        }

        if(response.IsSuccessStatusCode)
        {
             return await response.Content.ReadAsAsync<TOut>();
        }
        //Exception handling
    }

    private void AddHeaders(HttpRequestMessage request, Dictionary<string, string> headers)
    {
        request.Headers.Accept.Clear();
        request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        if (headers == null) return;

        foreach (var header in headers)
        {
            request.Headers.Add(header.Key, header.Value);
        }
    }

    private static void AddBody(object param, HttpRequestMessage request)
    {
        if (param != null)
        {
            var content = JsonConvert.SerializeObject(param);
            request.Content = new StringContent(content);
            request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        }
    }

SubWebApi.cs

public sealed class SubWebApi : BaseWebApi
{
    public SubWebApi(HttpClient httpClient) : base(httpClient) {}

    public async Task<StuffResponse> GetStuffAsync(int cvr)
    {
        var method = "get/stuff";
        var request = new StuffRequest 
        {
            query = "GiveMeStuff"
        }
        return await PostAsync<StuffResponse>(method, request, GetHeaders(), HttpMethod.Post);
    }
    private Dictionary<string, string> GetHeaders()
    {
        var headers = new Dictionary<string, string>();
        var basicAuth = GetBasicAuth();
        headers.Add("Authorization", basicAuth);
        return headers;
    }

    private string GetBasicAuth()
    {
        var byteArray = Encoding.ASCII.GetBytes($"{SystemSettings.Username}:{SystemSettings.Password}");
        var authString = Convert.ToBase64String(byteArray);
        return $"Basic {authString}";
    }
}

1

আপনি যদি HttpClientবেয়ার টোকেনের সাথে অনুরোধ পাঠাতে চান তবে এই কোডটি একটি ভাল সমাধান হতে পারে:

var requestMessage = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    Content = new StringContent(".....", Encoding.UTF8, "application/json"),
    RequestUri = new Uri(".....")
};

requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "Your token");

var response = await _httpClient.SendAsync(requestMessage);

0

নেট .core আপনি ব্যবহার করতে পারেন

var client = new HttpClient();
client.SetBasicAuthentication(userName, password);

অথবা

var client = new HttpClient();
client.SetBearerToken(token);

1
প্রথম উদাহরণটি SetBasicAuthentication()ডিফল্ট হিসাবে উপলব্ধ না হিসাবে কাজ করে না তাই এটি একটি এক্সটেনশন পদ্ধতি হতে হবে। এটি সংজ্ঞায়িত কোথায়?
ViRuSTriNiTy

0

বিদ্যমান লাইব্রেরিটি ব্যবহার করা আরও সহজ হতে পারে।

উদাহরণস্বরূপ, নীচের এক্সটেনশন পদ্ধতিগুলি আইডেন্টিটি সার্ভার 4 https://www.nuget.org/packages/IdentityModel/ এর সাথে যুক্ত করা হয়েছে

 public static void SetBasicAuthentication(this HttpClient client, string userName, string password);
    //
    // Summary:
    //     Sets a basic authentication header.
    //
    // Parameters:
    //   request:
    //     The HTTP request message.
    //
    //   userName:
    //     Name of the user.
    //
    //   password:
    //     The password.
    public static void SetBasicAuthentication(this HttpRequestMessage request, string userName, string password);
    //
    // Summary:
    //     Sets a basic authentication header for RFC6749 client authentication.
    //
    // Parameters:
    //   client:
    //     The client.
    //
    //   userName:
    //     Name of the user.
    //
    //   password:
    //     The password.
    public static void SetBasicAuthenticationOAuth(this HttpClient client, string userName, string password);
    //
    // Summary:
    //     Sets a basic authentication header for RFC6749 client authentication.
    //
    // Parameters:
    //   request:
    //     The HTTP request message.
    //
    //   userName:
    //     Name of the user.
    //
    //   password:
    //     The password.
    public static void SetBasicAuthenticationOAuth(this HttpRequestMessage request, string userName, string password);
    //
    // Summary:
    //     Sets an authorization header with a bearer token.
    //
    // Parameters:
    //   client:
    //     The client.
    //
    //   token:
    //     The token.
    public static void SetBearerToken(this HttpClient client, string token);
    //
    // Summary:
    //     Sets an authorization header with a bearer token.
    //
    // Parameters:
    //   request:
    //     The HTTP request message.
    //
    //   token:
    //     The token.
    public static void SetBearerToken(this HttpRequestMessage request, string token);
    //
    // Summary:
    //     Sets an authorization header with a given scheme and value.
    //
    // Parameters:
    //   client:
    //     The client.
    //
    //   scheme:
    //     The scheme.
    //
    //   token:
    //     The token.
    public static void SetToken(this HttpClient client, string scheme, string token);
    //
    // Summary:
    //     Sets an authorization header with a given scheme and value.
    //
    // Parameters:
    //   request:
    //     The HTTP request message.
    //
    //   scheme:
    //     The scheme.
    //
    //   token:
    //     The token.
    public static void SetToken(this HttpRequestMessage request, string scheme, string token);

0

ওউথ প্রক্রিয়া প্রবাহ জটিল এবং একটি ত্রুটি বা অন্যটির জন্য সর্বদা একটি কক্ষ থাকে। আমার পরামর্শ হ'ল সর্বদা বয়লারপ্লেট কোড এবং OAuth প্রমাণীকরণ প্রবাহের জন্য লাইব্রেরির একটি সেট ব্যবহার করা t এটি আপনার জীবনকে আরও সহজ করে তুলবে।

লাইব্রেরি সেট করার লিঙ্কটি এখানে। । নেট এর জন্য ওআউথ গ্রন্থাগারগুলি


-1

এটি কাজ করতে পারে, যদি আপনি পরিষেবা থেকে জসন বা এক্সএমএল পান এবং আমি মনে করি যে এটি আপনাকে শিরোনাম এবং টি টাইপটি কীভাবে কাজ করে সে সম্পর্কে একটি ধারণা দিতে পারে, যদি আপনি MakeXMLRequest (xmldocumnet এ ফলাফল রাখুন) এবং MakeJsonRequest ফাংশনটি ব্যবহার করেন (জাসনকে ক্লাসে রাখুন আপনার ইচ্ছা মতো যে কাঠামোটি জাসন প্রতিক্রিয়াযুক্ত) পরবর্তী পদ্ধতিতে

/*-------------------------example of use-------------*/
MakeXmlRequest<XmlDocument>("your_uri",result=>your_xmlDocument_variable =     result,error=>your_exception_Var = error);

MakeJsonRequest<classwhateveryouwant>("your_uri",result=>your_classwhateveryouwant_variable=result,error=>your_exception_Var=error)
/*-------------------------------------------------------------------------------*/


public class RestService
{
    public void MakeXmlRequest<T>(string uri, Action<XmlDocument> successAction, Action<Exception> errorAction)
    {
        XmlDocument XMLResponse = new XmlDocument();
        string wufooAPIKey = ""; /*or username as well*/
        string password = "";
        StringBuilder url = new StringBuilder();
        url.Append(uri);
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url.ToString());
        string authInfo = wufooAPIKey + ":" + password;
        authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
        request.Timeout = 30000;
        request.KeepAlive = false;
        request.Headers["Authorization"] = "Basic " + authInfo;
        string documento = "";
        MakeRequest(request,response=> documento = response,
                            (error) =>
                            {
                             if (errorAction != null)
                             {
                                errorAction(error);
                             }
                            }
                   );
        XMLResponse.LoadXml(documento);
        successAction(XMLResponse);
    }



    public void MakeJsonRequest<T>(string uri, Action<T> successAction, Action<Exception> errorAction)
    {
        string wufooAPIKey = "";
        string password = "";
        StringBuilder url = new StringBuilder();
        url.Append(uri);
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url.ToString());
        string authInfo = wufooAPIKey + ":" + password;
        authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
        request.Timeout = 30000;
        request.KeepAlive = false;
        request.Headers["Authorization"] = "Basic " + authInfo;
       // request.Accept = "application/json";
      //  request.Method = "GET";
        MakeRequest(
           request,
           (response) =>
           {
               if (successAction != null)
               {
                   T toReturn;
                   try
                   {
                       toReturn = Deserialize<T>(response);
                   }
                   catch (Exception ex)
                   {
                       errorAction(ex);
                       return;
                   }
                   successAction(toReturn);
               }
           },
           (error) =>
           {
               if (errorAction != null)
               {
                   errorAction(error);
               }
           }
        );
    }
    private void MakeRequest(HttpWebRequest request, Action<string> successAction, Action<Exception> errorAction)
    {
        try{
            using (var webResponse = (HttpWebResponse)request.GetResponse())
            {
                using (var reader = new StreamReader(webResponse.GetResponseStream()))
                {
                    var objText = reader.ReadToEnd();
                    successAction(objText);
                }
            }
        }catch(HttpException ex){
            errorAction(ex);
        }
    }
    private T Deserialize<T>(string responseBody)
    {
        try
        {
            var toReturns = JsonConvert.DeserializeObject<T>(responseBody);
             return toReturns;
        }
        catch (Exception ex)
        {
            string errores;
            errores = ex.Message;
        }
        var toReturn = JsonConvert.DeserializeObject<T>(responseBody);
        return toReturn;
    }
}
}

-1
static async Task<AccessToken> GetToken()
{
        string clientId = "XXX";
        string clientSecret = "YYY";
        string credentials = String.Format("{0}:{1}", clientId, clientSecret);

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials)));
            List<KeyValuePair<string, string>> requestData = new List<KeyValuePair<string, string>>();
            requestData.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
            FormUrlEncodedContent requestBody = new FormUrlEncodedContent(requestData);
            var request = await client.PostAsync("https://accounts.spotify.com/api/token", requestBody);
            var response = await request.Content.ReadAsStringAsync();
            return JsonConvert.DeserializeObject<AccessToken>(response);
        }
    }

স্ট্যাকওভারফ্লোতে স্বাগতম। আপনি যে উত্তর প্রদান করেছেন তা ছাড়াও দয়া করে কেন এবং কীভাবে এটি সমস্যার সমাধান করে তার সংক্ষিপ্ত বিবরণ দেওয়ার জন্য দয়া করে বিবেচনা করুন।
jtate

-2

এটি শিরোনাম নির্ধারণে সহায়তা করতে পারে:

WebClient client = new WebClient();

string authInfo = this.credentials.UserName + ":" + this.credentials.Password;
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
client.Headers["Authorization"] = "Basic " + authInfo;

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