.NET কনসোল থেকে একটি JSON ওয়েব পরিষেবা কল করার সর্বোত্তম উপায়


90

আমি এএসপি.নেট এমভিসি 3 তে একটি ওয়েব পরিষেবা হোস্ট করছি যা একটি জসন স্ট্রিং দেয়। এসি # কনসোল অ্যাপ্লিকেশন থেকে ওয়েব সার্ভিস কল করার এবং রিটাকে একটি .NET অবজেক্টে পার্স করার সর্বোত্তম উপায় কী?

আমার কনসোল অ্যাপ্লিকেশনে এমভিসি 3 কে রেফারেন্স করা উচিত?

জসন.নেটের .NET অবজেক্টগুলি সিরিয়ালাইজ করার এবং ডিজিটাইজ করার জন্য কয়েকটি দুর্দান্ত পদ্ধতি রয়েছে তবে আমি দেখতে পাচ্ছি না যে এটির কোনও ওয়েবসাইট থেকে পোস্টিং এবং গেটিংয়ের মান রয়েছে।

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

উত্তর:


143

আমি ওয়েব পরিষেবা থেকে জিইটি-তে HTTPWebRequest ব্যবহার করি, যা আমাকে একটি JSON স্ট্রিং দেয়। এটি জিইটি-র জন্য দেখতে এমন কিছু দেখাচ্ছে:

// Returns JSON string
string GET(string url) 
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    try {
        WebResponse response = request.GetResponse();
        using (Stream responseStream = response.GetResponseStream()) {
            StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.UTF8);
            return reader.ReadToEnd();
        }
    }
    catch (WebException ex) {
        WebResponse errorResponse = ex.Response;
        using (Stream responseStream = errorResponse.GetResponseStream())
        {
            StreamReader reader = new StreamReader(responseStream, System.Text.Encoding.GetEncoding("utf-8"));
            String errorText = reader.ReadToEnd();
            // log errorText
        }
        throw;
    }
}

আমি তখন স্ট্রিংটিকে গতিশীলভাবে পার্স করতে JSON.Net ব্যবহার করি । বিকল্পভাবে, আপনি এই কোডপ্লেক্স সরঞ্জামটি ব্যবহার করে নমুনা জেএসএন আউটপুট থেকে স্টেটিকালি সি # শ্রেণি তৈরি করতে পারেন: http://jsonclassgenerator.codeplex.com/

পোস্টটি দেখতে এমন দেখাচ্ছে:

// POST a JSON string
void POST(string url, string jsonContent) 
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";

    System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
    Byte[] byteArray = encoding.GetBytes(jsonContent);

    request.ContentLength = byteArray.Length;
    request.ContentType = @"application/json";

    using (Stream dataStream = request.GetRequestStream()) {
        dataStream.Write(byteArray, 0, byteArray.Length);
    }
    long length = 0;
    try {
        using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) {
            length = response.ContentLength;
        }
    }
    catch (WebException ex) {
        // Log exception and throw as for GET example above
    }
}

আমি আমাদের ওয়েব পরিষেবার স্বয়ংক্রিয় পরীক্ষায় এর মতো কোড ব্যবহার করি।


জসনক্লাসগেনেটর দুর্দান্ত। আপনি জসন স্ট্রিং পেরিয়ে দৃ the়ভাবে টাইপ করা অবজেক্টটি তৈরি করায় ডিসরিয়ালাইজেশন সহজ।
হারুনএলএস

অ-এসকিআই সেটে আপনার যদি অক্ষর থাকে তবে আপনার কোডটি কিছুটা বদলানো দরকার। কন্টেন্টলেন্থ পোস্ট করা সামগ্রীগুলিতে বাইটের সংখ্যা উপস্থাপন করে, তাই প্রযুক্তিগতভাবে অনুরোধ করুন L
গ্রেডি ওয়ার্নার

Encoding.GetEncoding("utf-8")দ্বারা প্রতিস্থাপিত হতে পারেEncoding.UTF8
JoelFan

ধন্যবাদ, এটি খুব সহায়ক
শ্বেতা

অনুমোদনের অংশ হিসাবে টোকেন সেট করা হবে তবে পরীক্ষার প্রয়োজন হলে আমাদের শিরোনামও পাস করতে হতে পারে। এই অনুরোধটি পছন্দ করুন ethমাথোদ = "জিইটি"; অনুরোধ। সময়কাল = 20000; অনুরোধ। কনটেন্টটাইপ = "অ্যাপ্লিকেশন / জেসন"; অনুরোধ.হেইডার্স.এড করুন ("অনুমোদন", "আপনার টোকেন বহনকারী:
কুরকুলা

51

জিনসকে একটি .NET অবজেক্টে deserialize করার জন্য দূরবর্তী url এবং জাভাস্ক্রিপ্টসরিয়ালাইজার বা Json.NET থেকে সামগ্রীগুলি আনার জন্য ওয়েবক্লিয়েন্ট । উদাহরণস্বরূপ আপনি একটি মডেল শ্রেণি সংজ্ঞায়িত করেছেন যা JSON কাঠামোকে প্রতিফলিত করবে এবং তারপরে:

using (var client = new WebClient())
{
    var json = client.DownloadString("http://example.com/json");
    var serializer = new JavaScriptSerializer();
    SomeModel model = serializer.Deserialize<SomeModel>(json);
    // TODO: do something with the model
}

কিছু রেস্ট ক্লায়েন্ট ফ্রেমওয়ার্ক রয়েছে যা আপনি চেকআউট করতে পারেন যেমন রেস্টশার্প


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

এসি # অবজেক্টের সমস্ত সম্পত্তি-নাম / সম্পত্তি মানগুলি কী পোস্ট-কী-মান জোড় (বা জিইটি কী-মান জোড়া) রূপান্তর করার কোনও উপায় আছে? যাতে আমি কার্যকরভাবে সি # অবজেক্টটিকে আমার ওয়েবসার্চ পদ্ধতিতে ইনপুট মান হিসাবে ব্যবহার করতে পারি?
25:37

@ ব্রোকমাইলেগবাইকিং, এটি নির্ভর করবে আপনার কী কী বস্তু রয়েছে এবং কীভাবে ওয়েব পরিষেবা ইনপুটটি প্রত্যাশা করে।
দারিন দিমিত্রভ

4
আমি সত্যিই রেস্টশার্প লাইব্রেরিটি উপভোগ করেছি। যে উল্লেখ করার জন্য ধন্যবাদ।
ব্রায়ান রায়

4
সাহসী আপনি এটি আপডেট করতে পারেন, ক্লায়েন্ট.ডাউনলোড স্ট্রিং () আর কার্যকর হবে না।
JReam

9

যদিও বিদ্যমান উত্তরগুলি বৈধ পন্থা, সেগুলি পুরানো। এইচটিপিপ্লিয়েন্ট RESTful ওয়েব পরিষেবাদির সাথে কাজ করার জন্য একটি আধুনিক ইন্টারফেস। লিঙ্কটিতে পৃষ্ঠার উদাহরণ বিভাগটি দেখুন, এটি একটি অ্যাসিনক্রোনাস এইচটিটিপি জিইটি-র জন্য খুব সোজা ব্যবহারের কেস রয়েছে।

using (var client = new System.Net.Http.HttpClient())
{
    return await client.GetStringAsync("https://reqres.in/api/users/3"); //uri
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.