এইচটিপিপি্লিয়েন্ট পোস্টএএসজসনসাইক ব্যবহার করে এএসপি.নেট কোরে HTTP পোস্ট পোস্ট করুন


143

আমি ডায়নামিক অবজেক্টের মতো পাঠাতে চাই

new { x = 1, y = 2 };

এইচটিটিপি পোস্ট মেসেজের মূল অংশ হিসাবে। তাই আমি লেখার চেষ্টা করি

var client = new HttpClient();

তবে আমি পদ্ধতি খুঁজে পাচ্ছি না

client.PostAsJsonAsync()

তাই আমি মাইক্রোসফ্ট.অ্যাসনেটকোর.হট্ট্প.এক্সটেনশন প্যাকেজটি প্রজেক্ট.জসনের সাথে যুক্ত করার চেষ্টা করেছি

using Microsoft.AspNetCore.Http.Extensions; 

ধারা ব্যবহার করতে। তবে এটি আমাকে সাহায্য করেনি।

সুতরাং এএসপি.নেট কোরে জেএসওএন বডি সহ পোষ্ট অনুরোধ প্রেরণের সহজতম উপায় কী?


উত্তর:


206

আপনার "Microsoft.AspNet.WebApi.Client" প্যাকেজের ( নমুনাগুলির জন্য এই নিবন্ধটি পড়ুন ) উল্লেখ করা উচিত ।

কোনও অতিরিক্ত এক্সটেনশন ছাড়াই আপনি স্ট্যান্ডার্ড PostAsyncপদ্ধতি ব্যবহার করতে পারেন :

client.PostAsync(uri, new StringContent(jsonInString, Encoding.UTF8, "application/json"));

jsonInStringকল করে আপনি যেখানে মান পেতে পারেনJsonConvert.SerializeObject(<your object>);


1
তবে মাইক্রোসফ্ট.এস্পনেট.ওয়েবপিপি.ক্লিয়েন্ট এএসপি.নেট কোর আরসি 2 লাইব্রেরির মতো দেখাচ্ছে না। এবং সেকোন উপায়টি কোড পুনরাবৃত্তির চেয়ে অনেক বেশি ((
রিম

@ রেম আপনি কেন দ্বিতীয় উপায়ে ব্যবহারের জন্য কোনও HttpClient এক্সটেনশন পদ্ধতি ( PostAsJsonAsync) তৈরি করেন না । এটি আপনাকে কোড পুনরাবৃত্তি এড়াতে সক্ষম করে।
আদম ক্যাগলিন

1
অবশ্যই। তবে আমি প্রশ্নটি জিজ্ঞাসা করেছিলাম কি আমি কিছু মিস করছি। আমি বিশ্বাস করতে পারি না এটি এখনও কোরে প্রয়োগ করা হয়নি!
রেম

1
এই লাইব্রেরিটি মূল / নেট-স্ট্যান্ডার্ড নয়, আমার মনে হয় না System.Net.Http. ফর্ম্যাটটি এখনও পোর্ট করা হয়েছে
ক্রিস এস

1
এটি নুগেট প্যাকেজ মাইক্রোসফট। তবে আপনি কীভাবে এটি করেন তবে শিরোনাম যেমন একটি অনুমোদনের কী যুক্ত করুন key
নিক গ্যালিমোর

98

আমি এই ক্লাসটি ব্যবহার করি:

public class JsonContent : StringContent
{
    public JsonContent(object obj) :
        base(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")
    { }
}

ব্যবহারের নমুনা:

new HttpClient().PostAsync("http://...", new JsonContent(new { x = 1, y = 2 }));

5
কেন একটি এক্সটেনশন পদ্ধতি? পাবলিক স্ট্যাটিক ক্লাস জসনসন্ট {পাবলিক টাস্ক <?> পোস্টএএসজেএসসোনএসিঙ্ক (এই এইচটিপিপি্লায়েন্ট ক্লায়েন্ট, শেরাইজএএসজেএসকে আপত্তি জানায়) {...}}
তমুসজেরোয়

2
আমি জসনসন্টেন্ট শ্রেণি পদ্ধতির পছন্দ করি
মার্কো আলভেস

এটি কি Content-Length:এইচটিটিপি শিরোনাম সেট করে ?
ব্য্যাচেস্লাভ নেপাদোভস্কি

1
@ ভাইচেস্লাভ নেপাদোভস্কি এটি HttpClientসেটিংসের উপর নির্ভর করে , যেমন যদি একটি সেট client.DefaultRequestHeaders.TransferEncodingChunked = true Content-Lengthশিরোনাম সেট না করা হয় এবং Transfer-Encoding: chunkedতার পরিবর্তে সেট করা যায়। তবে, যদি কেউ ক্লায়েন্টের মতো তৈরি করে var client = new HttpClient();, শিরোনামটি Content-Lengthডিফল্টরূপে এই বিষয়বস্তু শ্রেণির জন্য সেট করা হবে।
স্টপ-ক্রান

12

আমি গৃহীত উত্তর যোগ হবে আপনার কাছে যোগ করার জন্য চাইবেন Acceptকরার হেডার httpClient:

httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

হ্যাঁ, আমার কাছে এটিও প্রয়োজনীয়, পোস্টম্যান ব্যবহার করে নিশ্চিত হওয়া দরকার।
ওয়েইহুই গুও

1

আপনি ঠিক বলেছেন যে এটি দীর্ঘকাল থেকে .NET কোর এ প্রয়োগ করা হয়েছে।

লেখার সময় (সেপ্টেম্বর 2019), project.jsonনুগেট ৩.x + এর ফাইলটি PackageReference(যেমন https://docs.microsoft.com/en-us/nuget/archive/project-json এ ব্যাখ্যা করা হয়েছে ) ছাড়িয়ে গেছে ।

শ্রেণীর *Asyncপদ্ধতিতে অ্যাক্সেস পেতে HttpClientআপনার .csprojফাইলটি অবশ্যই সঠিকভাবে কনফিগার করা উচিত।

আপনার .csprojফাইলটি একটি সরল পাঠ্য সম্পাদকে খুলুন এবং নিশ্চিত করুন যে প্রথম লাইনটি
<Project Sdk="Microsoft.NET.Sdk.Web">
(যেমন https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj# তে দেখানো হয়েছে) -csproj-format )।

ক্লাসের *Asyncপদ্ধতিগুলিতে অ্যাক্সেস পেতে আপনার ফাইলে HttpClientসঠিক প্যাকেজ রেফারেন্স থাকা দরকার .csproj:

<ItemGroup>
    <!-- ... -->
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <!-- ... -->
</ItemGroup>

(দেখুন https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference এছাড়াও। আমরা ASP.NET কোর 2.1 এবং টার্গেটিং অ্যাপ্লিকেশন সুপারিশ পরে মাইক্রোসফ্ট.এএসপনেটকোর.এপ মেটাপ্যাকেজ , https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage ব্যবহার করুন )

যেমন পদ্ধতি PostAsJsonAsync, ReadAsAsync, PutAsJsonAsyncএবং DeleteAsyncএখন বাক্সের কাজ করা উচিত। (কোনও নির্দেশিকা ব্যবহারের প্রয়োজন নেই))

আপডেট: প্যাকেজ রেফারেন্স ট্যাগটির আর .NET কোর 3.0 তে আর প্রয়োজন নেই।


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